object references an unsaved transient instance - save the transient instance before flushing:
译意:对象引用了一个未被保存的瞬态实例,保存对象前先保存这个瞬态实例。
Hibernate 保存对象时会先判断该对象是否引用其它对象,如果引用了其它对象,则判断其它对象是否存在,如果其它对象不存在,则报上述异常。
例子:
车:
public class Car {
private String no; //车子的唯一性标识
private String color;
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
人:
public class Person {
private String idCard; //人的唯一性标识
private String name;
private int age;
private Car car;
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}
}
测试:
public class Test {
public static void main(String[] args) {
Car car = new Car();
car.setNo("lu hu");
car.setColor("white");
Person person = new Person();
person.setIdCard("11111111111");
person.setCar(car);
person.setName("zsc");
person.setAge(100);
save(person); //调用hibernate的保存对象方法
}
}
说明:当使用hibernate保存person对象时会先检查car对象是否存在,如果car对象不存在刚会报上述异常。人对象引用了车子对象,当保存人对象时必须保证人对象引用的车子对象存在才能保存,否则抛异常。