Java 冬眠不';t在执行一对一映射时填写第二个表

Java 冬眠不';t在执行一对一映射时填写第二个表,java,spring,hibernate,jpa,one-to-one,Java,Spring,Hibernate,Jpa,One To One,我有一个小应用程序,负责将数据保存在数据库中。为此,我正在使用Hibernate。下面是我的代码: 用户类 @Entity @Table(name = "USERS") @Transactional public class User implements Serializable{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "USER_ID") private int userId; @Co

我有一个小应用程序,负责将数据保存在数据库中。为此,我正在使用
Hibernate
。下面是我的代码:

用户类

@Entity
@Table(name = "USERS")
@Transactional
public class User implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID")
private int userId;

@Column(name = "FIRST_NAME")
private String firstName;

@Column(name = "SURNAME")
private String surname;

@Column(name = "AGE")
private int age;

@Column(name = "EMAIL")
private String email;

@OneToOne(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
private Address address;

public User() {

}

public User(String firstName, String secondName, int age, String email) {
    this.firstName = firstName;
    this.surname = secondName;
    this.age = age;
    this.email = email;
}

// GETTERS/SETTERS
@Entity
@Table(name = "ADDRESS")
@Transactional
public class Address implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;

@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "user"))
@Id
@GeneratedValue(generator = "generator")
@Column(name = "USER_ID", unique = true, nullable = false)
private int addressId;

@Column(name = "STREET")
private String street;

@Column(name = "STREET_NUMBER")
private String streetNumber;

@Column(name = "FLAT_NUMBER")
private String flatNumber;

@Column(name = "POSTAL_CODE")
private String postalCode;

@Column(name = "CITY")
private String city;

@Column(name = "COUNTRY")
private String country;

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn(name = "USER_ID")
private User user;


public Address() {

}

public Address(String street, String streetNumber, String flatNumber, String postalCode, String city, String country) {
    this.street = street;
    this.streetNumber = streetNumber;
    this.flatNumber = flatNumber;
    this.postalCode = postalCode;
    this.city = city;
    this.country = country;
}

//GETTERS/SETTERS
地址类

@Entity
@Table(name = "USERS")
@Transactional
public class User implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USER_ID")
private int userId;

@Column(name = "FIRST_NAME")
private String firstName;

@Column(name = "SURNAME")
private String surname;

@Column(name = "AGE")
private int age;

@Column(name = "EMAIL")
private String email;

@OneToOne(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
private Address address;

public User() {

}

public User(String firstName, String secondName, int age, String email) {
    this.firstName = firstName;
    this.surname = secondName;
    this.age = age;
    this.email = email;
}

// GETTERS/SETTERS
@Entity
@Table(name = "ADDRESS")
@Transactional
public class Address implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;

@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "user"))
@Id
@GeneratedValue(generator = "generator")
@Column(name = "USER_ID", unique = true, nullable = false)
private int addressId;

@Column(name = "STREET")
private String street;

@Column(name = "STREET_NUMBER")
private String streetNumber;

@Column(name = "FLAT_NUMBER")
private String flatNumber;

@Column(name = "POSTAL_CODE")
private String postalCode;

@Column(name = "CITY")
private String city;

@Column(name = "COUNTRY")
private String country;

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn(name = "USER_ID")
private User user;


public Address() {

}

public Address(String street, String streetNumber, String flatNumber, String postalCode, String city, String country) {
    this.street = street;
    this.streetNumber = streetNumber;
    this.flatNumber = flatNumber;
    this.postalCode = postalCode;
    this.city = city;
    this.country = country;
}

//GETTERS/SETTERS
当我执行负责在这两个表中保存数据的
save()
方法时,只填充用户表

我找到了这个解决方案

但这对我不起作用

我正在使用:

  • Hibernate 4.3.6.1最终版本
  • 弹簧4.3.6.释放

您的地址类应按如下方式编码(假设地址应使用与生成Id的用户相同的Id创建):

持续期间

User u = new User();
// populate u fields

Address a = new Address();
a.setUser(u);
// populate a fields

session.persist(a);

伟大的很高兴我能帮忙