Java 多对一(项目类型关系):标识符从x更改为y
我有两个类项目和类型。项目属于一种类型 它工作正常。但是,当我尝试更改已保存项目的类型时,会出现以下错误: com.myapp.model.Type实例的标识符已从1更改为1 到2 Hibernate似乎认为我试图编辑类型的id。实际上,我想更改项目的类型,而不是编辑它所在的类型。举个简单的例子,我有一个项目名称“Ball”属于“sport”类型,但现在我想将其更改为“Tool”类型。Hibernate认为我想把“Sport”类型的名称(和Id)改成“Tool” 伪代码:Java 多对一(项目类型关系):标识符从x更改为y,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,我有两个类项目和类型。项目属于一种类型 它工作正常。但是,当我尝试更改已保存项目的类型时,会出现以下错误: com.myapp.model.Type实例的标识符已从1更改为1 到2 Hibernate似乎认为我试图编辑类型的id。实际上,我想更改项目的类型,而不是编辑它所在的类型。举个简单的例子,我有一个项目名称“Ball”属于“sport”类型,但现在我想将其更改为“Tool”类型。Hibernate认为我想把“Sport”类型的名称(和Id)改成“Tool” 伪代码: Item item =
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>
我认为正确的方法是
Item item = getItemFromDatabase(itemId);
item.setType(getItemTypeFromDatabase(newTypeId));
saveItem(item);
我认为正确的方法是
Item item = getItemFromDatabase(itemId);
item.setType(getItemTypeFromDatabase(newTypeId));
saveItem(item);
那么您得到了一个id为newTypeId的ItemType实例,但它仍然抛出相同的错误?您可以发布getItemTypeFromDatabase(itemTypeId)的代码吗?检查您是否实际设置了itemTypeId的不同实例谢谢,我发现了问题。问题不在于Hibernate,而在于Spring绑定方法。我将“item.type.id”绑定到一个文本框,这是错误的,因为hibernate会认为我正在尝试更改该类型的id。所以您得到了一个id为newTypeId的ItemType实例,但它仍然抛出相同的错误?您可以发布getItemTypeFromDatabase(itemTypeId)的代码吗?检查您是否实际设置了itemTypeId的不同实例谢谢,我发现了问题。问题不在于Hibernate,而在于Spring绑定方法。我将“item.type.id”绑定到一个文本框,这是错误的,因为hibernate会认为我正在尝试更改该类型的id。
Type updatedType = repository.getById(Type.class, item.getType().getId());
Item item = getItemFromDatabase(itemId);
item.setType(getItemTypeFromDatabase(newTypeId));
saveItem(item);