gpt4 book ai didi

java - 多对一(项目-类型关系): identifer was change from x to y

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:44 24 4
gpt4 key购买 nike

我有 2 类元素和类型。一个项目属于一种类型。

工作正常。但是当我尝试更改已保存项目的类型时,会出现错误:

identifier of an instance of com.myapp.model.Type was altered from 1 to 2.

Hibernate 似乎认为我尝试编辑 Type 的 id。实际上,我想更改项目的类型,而不是编辑它所在的类型。举个简单的例子,我有一个项目名称“Ball”属于“sport”类型,但现在我想将其更改为“Tool”类型。并且 Hibernate 认为我想将“Sport”类型的名称(和 Id)更改为“Tool”!

伪代码:

Item item = getItemFromDatabase(itemId);
item.setType(newType);
saveItem(item);

我的映射文件:

<hibernate-mapping>
<class name="com.myapp.model.Item" table="ITEM">
<cache usage="read-write"/>
<id name="id" column="ID">
<generator class="sequence">
<param name="sequence">item_seq</param>
</generator>
</id>

<property name="name" column="NAME"/>
<many-to-one name="type"
class="com.myapp.model.Type"
column="type_id"
foreign-key="ITEM_TYPE_FK"
/>

<property name="description" column="DESCRIPTION"/>
</class>
</hibernate-mapping>

还有

<hibernate-mapping>
<class name="com.myapp.model.Type" table="TYPE">
<cache usage="read-write"/>
<id name="id" column="ID">
<generator class="sequence">
<param name="sequence">type_seq</param>
</generator>
</id>

<property name="name" column="NAME"/>
</class>
</hibernate-mapping>

我是否误解了什么?

更新:

我有一个像这样的 Hibernate 实用函数:

    @Override
@SuppressWarnings("unchecked")
public <T> T getById(Class<T> entityClass, Serializable id) {
try {
Object result = this.sessionFactory.getCurrentSession().get(entityClass, id);
if (result != null) {
return (T)result;
} else {
return null;
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
throw new DataAccessException(e);
}
}

然后在我的代码中,我只需调用:

Type updatedType = repository.getById(Type.class, item.getType().getId());

最佳答案

我认为正确的方式是

Item item = getItemFromDatabase(itemId);
item.setType(getItemTypeFromDatabase(newTypeId));
saveItem(item);

关于java - 多对一(项目-类型关系): identifer was change from x to y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7156757/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com