Java 使用Hibernate注释的OneTONE双向映射
我想在我的两个实体(Persondeail, 护照细节)但它似乎工作不好。我想要 Persondeail有一个PassportId,PassportDetail也有一个PersonId 我的PersonDetail java代码Java 使用Hibernate注释的OneTONE双向映射,java,hibernate,mapping,Java,Hibernate,Mapping,我想在我的两个实体(Persondeail, 护照细节)但它似乎工作不好。我想要 Persondeail有一个PassportId,PassportDetail也有一个PersonId 我的PersonDetail java代码 @Entity @Table(name="persondetail") public class PersonDetail { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="pe
@Entity
@Table(name="persondetail")
public class PersonDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="person_id")
private int id;
@Column(name="person_name")
private String name;
@Column(name="person_phone")
private long phone;
@OneToOne(mappedBy="person",cascade=CascadeType.ALL)
@JoinColumn(name="passport_id")
private PassportDetail passport;
public PassportDetail getPassport() {
return passport;
}
public void setPassport(PassportDetail passport) {
this.passport = passport;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getPhone() {
return phone;
}
public void setPhone(long phone) {
this.phone = phone;
}
@Column(name="passport_id")
private int passort_id;
public int getPassort_id() {
return passort_id;
}
public void setPassort_id(int passort_id) {
this.passort_id = passort_id;
}
}
@Entity
@Table(name="PassportDetail")
public class PassportDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="passport_id")
private int id;
@Column(name="passport_number")
private String passportNumber;
@Column(name="country_name")
private String country;
@Column(name="issue_date")
@Temporal(TemporalType.DATE)
private Date date;
@OneToOne
@JoinColumn(name="person_id")
private PersonDetail person;
public String getPassportNumber() {
return passportNumber;
}
public void setPassportNumber(String passportNumber) {
this.passportNumber = passportNumber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public PersonDetail getPerson() {
return person;
}
public void setPerson(PersonDetail person) {
this.person = person;
}
}
public class MappingMain {
public static void main(String[] args) {
PersonDetail person=new PersonDetail();
PassportDetail passport = new PassportDetail();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
person.setName("Ankit");
person.setPhone(790148565);
passport.setCountry("india");
try {
passport.setDate(sdf.parse("2018-04-15"));
}
catch(Exception e)
{
}
passport.setPassportNumber("QUJMZ123");
passport.setPerson(person);
person.setPassport(passport);
PersonDao dao=new PersonDao();
dao.save(person);
}
这是我的PassportDetail Java代码
@Entity
@Table(name="persondetail")
public class PersonDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="person_id")
private int id;
@Column(name="person_name")
private String name;
@Column(name="person_phone")
private long phone;
@OneToOne(mappedBy="person",cascade=CascadeType.ALL)
@JoinColumn(name="passport_id")
private PassportDetail passport;
public PassportDetail getPassport() {
return passport;
}
public void setPassport(PassportDetail passport) {
this.passport = passport;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getPhone() {
return phone;
}
public void setPhone(long phone) {
this.phone = phone;
}
@Column(name="passport_id")
private int passort_id;
public int getPassort_id() {
return passort_id;
}
public void setPassort_id(int passort_id) {
this.passort_id = passort_id;
}
}
@Entity
@Table(name="PassportDetail")
public class PassportDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="passport_id")
private int id;
@Column(name="passport_number")
private String passportNumber;
@Column(name="country_name")
private String country;
@Column(name="issue_date")
@Temporal(TemporalType.DATE)
private Date date;
@OneToOne
@JoinColumn(name="person_id")
private PersonDetail person;
public String getPassportNumber() {
return passportNumber;
}
public void setPassportNumber(String passportNumber) {
this.passportNumber = passportNumber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public PersonDetail getPerson() {
return person;
}
public void setPerson(PersonDetail person) {
this.person = person;
}
}
public class MappingMain {
public static void main(String[] args) {
PersonDetail person=new PersonDetail();
PassportDetail passport = new PassportDetail();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
person.setName("Ankit");
person.setPhone(790148565);
passport.setCountry("india");
try {
passport.setDate(sdf.parse("2018-04-15"));
}
catch(Exception e)
{
}
passport.setPassportNumber("QUJMZ123");
passport.setPerson(person);
person.setPassport(passport);
PersonDao dao=new PersonDao();
dao.save(person);
}
以下是MySql中的输出
这是插入代码
@Entity
@Table(name="persondetail")
public class PersonDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="person_id")
private int id;
@Column(name="person_name")
private String name;
@Column(name="person_phone")
private long phone;
@OneToOne(mappedBy="person",cascade=CascadeType.ALL)
@JoinColumn(name="passport_id")
private PassportDetail passport;
public PassportDetail getPassport() {
return passport;
}
public void setPassport(PassportDetail passport) {
this.passport = passport;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getPhone() {
return phone;
}
public void setPhone(long phone) {
this.phone = phone;
}
@Column(name="passport_id")
private int passort_id;
public int getPassort_id() {
return passort_id;
}
public void setPassort_id(int passort_id) {
this.passort_id = passort_id;
}
}
@Entity
@Table(name="PassportDetail")
public class PassportDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="passport_id")
private int id;
@Column(name="passport_number")
private String passportNumber;
@Column(name="country_name")
private String country;
@Column(name="issue_date")
@Temporal(TemporalType.DATE)
private Date date;
@OneToOne
@JoinColumn(name="person_id")
private PersonDetail person;
public String getPassportNumber() {
return passportNumber;
}
public void setPassportNumber(String passportNumber) {
this.passportNumber = passportNumber;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public PersonDetail getPerson() {
return person;
}
public void setPerson(PersonDetail person) {
this.person = person;
}
}
public class MappingMain {
public static void main(String[] args) {
PersonDetail person=new PersonDetail();
PassportDetail passport = new PassportDetail();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
person.setName("Ankit");
person.setPhone(790148565);
passport.setCountry("india");
try {
passport.setDate(sdf.parse("2018-04-15"));
}
catch(Exception e)
{
}
passport.setPassportNumber("QUJMZ123");
passport.setPerson(person);
person.setPassport(passport);
PersonDao dao=new PersonDao();
dao.save(person);
}
这是DAO类
public class MappingDao {
SessionFactory sf=Util.getSessionFactory();
public void save(UserDemo user)
{
Session session=sf.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
session.close();
}
}
我希望Persondeail有一个PassportId,PassportDetail有一个PersonId:不,你真的不想要或不需要它。一个外键就足够了。这里是输出:输出什么?插入这两行的代码是什么?不能有双向关系,否则会产生循环依赖的问题。由于外键约束,无法插入任何一个表。@JBNizet Ok,因此在任何情况下一个外键就足够了,或者在其他情况下需要双向映射。如果是这样,请告诉我。输出表示执行此代码后两个表(Persondeail和PassportDetail)中的记录。执行此代码后:哪个代码?没有一行代码会在数据库中插入两个实体。我们所拥有的只是实体。如何使用和保存它们很重要。@JBNizet我刚刚插入了插入代码。如果你马上看一眼,我会很感激的。谢谢