Java 使用Hibernate注释的OneTONE双向映射

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

我想在我的两个实体(Persondeail, 护照细节)但它似乎工作不好。我想要 Persondeail有一个PassportId,PassportDetail也有一个PersonId

我的PersonDetail 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);

}
这是我的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我刚刚插入了插入代码。如果你马上看一眼,我会很感激的。谢谢