hibernate关联问题, org.hibernate.TransientObjectException: object references an unsaved transient instan

 org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: org.yhsap.domain.Address

package org.yhsap.domain;


import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;


@Entity
@Table(name="person_NToOne_inf")
public class PersonNToOne {
@Id
@SequenceGenerator(name="pk_person",allocationSize=1,initialValue=1,
sequenceName="sequence_person_NTo_inf")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_person")
@Column(name="person_id")
private Integer id;
private String name;
private int age;
@OneToOne(targetEntity=Address.class)
@JoinColumn(name="address_id",unique=true)
private Address address;
public PersonNToOne() {

}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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 Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}


}


package org.yhsap.domain;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;


import org.hibernate.annotations.GenericGenerator;


@Entity
@Table(name="address_inf")
public class Address {
@Id
@GenericGenerator(name="pk_address",strategy="uuid")
@GeneratedValue(generator="pk_address")
@Column(name="address_id")
private String id;
private String addressDetail;
public Address() {

}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAddressDetail() {
return addressDetail;
}
public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}


}


package test.org.yhsap.domain;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.yhsap.domain.Address;
import org.yhsap.domain.PersonNToOne;


public class testPerson_NToOne {


public static void main(String[] args) {
Configuration cf=new Configuration().configure();
ServiceRegistry serviceRegistry=new ServiceRegistryBuilder()
.applySettings(cf.getProperties())
.buildServiceRegistry();
SessionFactory sf=cf.buildSessionFactory(serviceRegistry);
Session session=sf.openSession();
Transaction ts=session.beginTransaction();
PersonNToOne p=new PersonNToOne();
p.setName("刘怀帮");
p.setAge(30);
Address a=new Address();
a.setAddressDetail("南京西康路7号");
p.setAddress(a);
//session.save(a);
session.save(p);

ts.commit();
session.close();
sf.close();

}


}


解决方法:

1、在关联 关系处,增加“cascade=CascadeType.ALL”

2、先保存Address对像,然后保存PersonNToOne对像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘怀帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值