Java hibernate中具有外键的一对多(例外:具有相同标识符值的不同对象已与会话关联) 我有两个实体,Person和Address。 公共阶层人士{ 私人长人形; 私有字符串名; 私有字符串lastName; @OneToMany(mappedBy=“person”) @级联(级联类型。保存\更新) 私有列表地址=新的ArrayList(); ------------------- } 公共课堂演讲{ 私有长地址ID; 私家弦街;; 私有字符串zipcode; @许多酮 @JoinColumn(name=“GRANT\u ID”) 私人; ------------------- } SessionFactory SessionFactory=新配置().configure().buildSessionFactory(); Session Session=sessionFactory.openSession(); session.beginTransaction(); 会话。保存(个人); session.getTransaction().commit();
这些值是从ui为这些实体设置的,并将使用hibernate保存在DAO中。当我提交表单并尝试保存对象时,出现以下错误。 “org.hibernate.unUniqueObjectException:具有相同标识符值的不同对象已与会话关联”。 在谷歌搜索了很多关于这个问题的信息后,我无法解决这个问题。如果我使用merge而不是save/saveorUpdate,它会将记录插入Person,而只将一条记录插入Address,即使我有两个地址。在过去的三天里,我一直在挣扎,我无法解决这个问题。Java hibernate中具有外键的一对多(例外:具有相同标识符值的不同对象已与会话关联) 我有两个实体,Person和Address。 公共阶层人士{ 私人长人形; 私有字符串名; 私有字符串lastName; @OneToMany(mappedBy=“person”) @级联(级联类型。保存\更新) 私有列表地址=新的ArrayList(); ------------------- } 公共课堂演讲{ 私有长地址ID; 私家弦街;; 私有字符串zipcode; @许多酮 @JoinColumn(name=“GRANT\u ID”) 私人; ------------------- } SessionFactory SessionFactory=新配置().configure().buildSessionFactory(); Session Session=sessionFactory.openSession(); session.beginTransaction(); 会话。保存(个人); session.getTransaction().commit();,java,spring,hibernate,Java,Spring,Hibernate,这些值是从ui为这些实体设置的,并将使用hibernate保存在DAO中。当我提交表单并尝试保存对象时,出现以下错误。 “org.hibernate.unUniqueObjectException:具有相同标识符值的不同对象已与会话关联”。 在谷歌搜索了很多关于这个问题的信息后,我无法解决这个问题。如果我使用merge而不是save/saveorUpdate,它会将记录插入Person,而只将一条记录插入Address,即使我有两个地址。在过去的三天里,我一直在挣扎,我无法解决这个问题。 我正在
我正在使用单独的序列为这两个表生成pks。有人能为我提供解决此问题的方法吗?提前感谢。您能否在提交表单时显示您的dao和客户端代码调用此方法@RequestMapping(value=“/savePerson”,method=RequestMethod.POST)公共字符串savePerson(@ModelAttribute(“person”)person){PersonDAO.savePerson(person);是我的控制器方法。在我的DAO中,如上所述获取会话并保存人员。请参阅此项对于此要求不有用。谢谢。Hibernate正在尝试选择列表中的第一个实体。它显示在Hibernate查询中。
I have two Entities, Person and Address.
public class Person{
private long personId;
private String firstName;
private String lastName;
@OneToMany(mappedBy="person")
@Cascade(CascadeType.SAVE_UPDATE)
private List<Address> addresses = new ArrayList<Address>();
-------------------
}
public class Address{
private long addressId;
private String street;
private String zipcode;
@ManyToOne
@JoinColumn(name="GRANT_ID")
private Person person;
-------------------
}
SessionFactory sessionFactory= new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(person);
session.getTransaction().commit();