2017-02-09 43 views
2

我有一个小应用程序负责将数据保存在数据库中。为此我使用Hibernate。下面是我的代码:当执行一对一映射时,Hibernate不会填充第二个表格

User类

@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 @OneToOne with Shared Primary Key(bidirectional). Dependent entity not persisted in DB.

,但它不为我工作。

我使用:

  • 休眠4.3.6.Final
  • 春4.3.6.RELEASE

回答

1

如下地址类应该进行编码(假设地址应该是具有相同ID创建为在产生ID的用户):

@Id 
@Column(name = "USER_ID", unique = true, nullable = false) 
private int addressId; 


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

在持续期间

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

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

session.persist(a); 
+0

谢谢,这个解决方案适用于我。 – user3552976

+0

太好了。很高兴我能帮上忙 –

相关问题