2017-02-09 21 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

太好了。很高興我能幫上忙 –

相關問題