@Entity (name = "user")
public class User {
@Id @GeneratedValue (strategy = GenerationType.IDENTITY)
private int userId;
private String username;
private String password;
@ManyToOne ()
@JoinColumn (name = "countryId")
private Country country;
//Getter & Setter
}
@Entity (name = "country")
public class Country {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private int countryId;
private String countryName;
//Getter & Setter
}
当我尝试保存user对象时,会出现以下异常:
org.hibernate.HibernateException: Data was not saved: object references an unsaved transient instance - save the transient instance before flushing: com.kyrogaming.models.Country
我怎样才能修复这个问题?
在告诉Hibernate这个新保存的对象所引用的所有其他对象之前,您不能将内容保存到Hibernate。因此,在本例中,您告诉Hibernate关于用户
,但没有告诉它关于国家
。
你可以用两种方法来解决这样的问题。
手动
您可以为Hibernate指定此关系应该使用CascadeType传播一些操作。在本例中,CascadeType.persist将完成这项工作,CascadeType.All也将完成这项工作。
参照现有国家
但是,根据您对@zerocool的响应,您有第二个问题,即当您有两个user
对象具有相同的country
时,您不能确保它是相同的country
。为此,您必须从数据库中获取适当的国家
,在新用户上设置它,然后保存用户
。然后,您的两个user
对象将引用相同的country
,而不仅仅是两个恰好具有相同名称的country
实例。查看Criterial
API作为获取现有实例的一种方法。
对于我的问题,我遇到了一些可能的好答案,但这是关于从Hibernate3.4.0ga升级到Hibernate4.1.8的。所以这在以前的版本下是可行的,我已经搜索了上上下下为什么它在这个新版本中被打破了。 我得到一个 这是我的课。
我有两个例子。一个是项目,一个是模块。< code >一对多关系。 我将模块设置到项目中。然后使用。第一次,因为数据库中没有记录,所以项目和模块可以保存到数据库中。然而,第二次,因为我不需要创建新项目,我只创建新模块,然后将模块设置回项目。 发生异常。 对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例。 有什么办法可以解决这个问题吗谢谢
上图显示了表之间的关系。 AddressType表包含静态值,如mailing、home、work等。 在AddressTypeRel模型类中,我有一个带有多对一注释的AddressType对象
我正在使用Seam Framework。我有2个实体: Request.java 和请求事件.java 当我进行此交易时: 我得到了这个错误:
问题内容: 我已经为我的问题找到了一些很好的答案,但这是关于从Hibernate 3.4.0GA升级到Hibernate 4.1.8的问题。因此,这在以前的版本中一直有效,我一直在高低搜寻其在新版本中的重要性。 我得到一个 org.hibernate.TransientObjectException:对象引用了一个未保存的瞬态实例- 在刷新之前保存该瞬态实例:com.test.server.dom
我真的很难解释为什么JPA不把我的@manytomy关系串联起来。我找到的所有答案都与缺少的cascade语句有关。但我确实有,而且仍然有: 原因:org.hibernate.瞬态对象异常:对象引用未保存的瞬态实例-在刷新之前保存瞬态实例:com.example.iaa.model.员工 代码基于本教程:https://hellokoding.com/jpa-many-to-many-relati