Java 休眠请求处理失败
我正在插入用户hv多对一映射到城市。然后将城市hv manytone映射到乡村。所以,当我插入具有重复城市或国家的用户时,它抛出异常Java 休眠请求处理失败,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,我正在插入用户hv多对一映射到城市。然后将城市hv manytone映射到乡村。所以,当我插入具有重复城市或国家的用户时,它抛出异常 @Entity @Table(name = "users") @XmlRootElement public class User implements java.io.Serializable { /** * */ private static final long serialVersionUID = -209569791
@Entity
@Table(name = "users")
@XmlRootElement
public class User implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = -2095697913583686677L;
private String firstname;
private String lastname;
private String dob;
private long mobile;
private String email;
@ManyToOne
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name = "city_name", nullable = false)
private City city;
private String country;
private String password;
private Date createdTime;
private Date lastLoggedIn;
private int rating;
@Id
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getDob() {
return dob;
}
public void setDob(String dob) {
this.dob = dob;
}
public long getMobile() {
return mobile;
}
public void setMobile(long mobile) {
this.mobile = mobile;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreatedTime() {
return createdTime;
}
public void setCreatedTime(Date createdTime) {
this.createdTime = createdTime;
}
public Date getLastLoggedIn() {
return lastLoggedIn;
}
public void setLastLoggedIn(Date lastLoggedIn) {
this.lastLoggedIn = lastLoggedIn;
}
public int getRating() {
return rating;
}
public void setRating(int rating) {
this.rating = rating;
}
public String toString() {
return "Name = " + firstname + ",Mobile = " + mobile + ",Email = "
+ email + ",City = " + city + ",Country = " + country
+ ", TimeCreated = " + createdTime;
}
}
@Entity
@Table(name = "city")
public class City {
@Id
@GeneratedValue
private int id;
@Column(name = "city_name", unique = true, nullable = false, length = 40)
private String cityName;
@ManyToOne
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name = "country_name", nullable = false)
private Country countryName;
@OneToMany
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name = "city_name")
private List<User> users;
public List<User> getStockDailyRecords() {
return this.users;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public Country getCountryName() {
return countryName;
}
public void setCountryName(Country countryName) {
this.countryName = countryName;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
@Entity
@Table(name = "country")
public class Country {
@Id
@GeneratedValue
private int id;
@Column(name = "country_name", unique = true, nullable = false, length = 40)
private String countryName;
@OneToMany
@JoinColumn(name = "country_name")
private List<City> citys;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
public List<City> getCitys() {
return citys;
}
public void setCitys(List<City> citys) {
this.citys = citys;
}
}
我看不到保存对象的代码。。但是从异常堆栈中,我可以看到您正在尝试在保存城市之前保存person。这是错误
org.hibernate.TransientPropertyValueException:对象引用了未保存的瞬态。
当您试图持久化父对象而您的子对象不是“是”持久化时,会出现此问题,因此在您的情况下,请先保存国家、城市,然后将其设置为“用户对象”,然后保存用户对象
在hibernate中保存对象有多种方法,具体取决于您使用的对象
saveOrUpdate();
update();
save();
persist();
merge();
有关更多详细信息,请访问您的错误消息中另有说明(我相信)。看来你没有正确地坚持你的道。另外,如何配置persistence.xml和applicationContext.xml文件?我有一个用户实体,它和城市有多对一的映射。然后城市实体与国家进行多对一映射。所以,如果我插入具有相同城市和国家的用户,则会出现此错误。@SubhamRohatgi不过,请在这个问题中发布您的spring应用程序context.xml和persistence.xml文件。当您使用
spring
Changeupdate
tocreate
notupdate
将持久性和上下文设置文件标记为问题时,这是一种标准做法。有趣的是,在测试和生产中,“验证”应该与数据库一起工作,但在这种情况下,它不会在每次我重新启动服务器时删除表并再次创建。我试图先保存国家,然后保存城市,然后保存用户。cityName和countryName是唯一的。当我试图保存来自同一城市和国家的其他用户时,我遇到了这个错误。
saveOrUpdate();
update();
save();
persist();
merge();