使用JPA实现多对一关系时出现的错误,以下为报错信息:
ERROR: HHH000346: Error during managed flush [org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.lzp.beans.User.customer -> com.lzp.beans.Customer]
原因就是,没有对所有要保存的实体进行持久化操作,错误代码是示例:
//保存多对一时,建议先保存1的一端,后保存n的一端,这样不会多出额外的Update语句
@org.junit.Test
public void testManyToOnePersistence() {
User user=new User();
user.setEmail("hello@qq.com");
user.setGender(1);
user.setName("lzp");
user.setBirth(new Date());
User user1=new User();
user1.setEmail("hello@qq.com");
user1.setGender(1);
user1.setName("lzp");
user1.setBirth(new Date());
Customer customer=new Customer();
customer.setEmail("lzp@qq.com");
customer.setGender(0);
customer.setName("lzpp");
user.setCustomer(customer);
user1.setCustomer(customer);
//以下都需要进行持久化
manager.persist(user);
manager.persist(user1);
// manager.persist(customer); 没有对其进行持久化操作
}
执行此段代码时,就会出现上述的错误信息,当对两个user对象和customer对象都进行持久化操作时,就不会出现错误正常运行。
以下为正常运行结果: