@Entity
class User{
@Id
private long id;
@OneToOne(
fetch = FetchType.LAZY,
optional = false)
@PrimaryKeyJoinColumn
private Address addr;
}
| user |address|
|id<pk><fk_from_address_id>|id|
@Entity
class User{
@Id
@GeneratedValue(generator = "addressKeyGenerator")
@org.hibernate.annotations.GenericGenerator(
name = "addressKeyGenerator",
strategy = "foreign",
parameters =
@org.hibernate.annotations.Parameter(
name = "property", value = "addr"
)
)
private long id;
@OneToOne(
fetch = FetchType.LAZY,
optional = false)
@PrimaryKeyJoinColumn
private Address addr;
}
@Entity
class Address{
@Id
@GeneratedValue
private long id;
@OneToOne(
mappedBy = "addr",
cascade = CascadeType.PERSIST)
private User user;
}
| user |address|
|id<pk><fk_from_address_id>|id|
- 不共享主鍵只要將@PrimarKeyJoinColumn改爲@JoinColumn,並各自指定生成策略即可。
表結構
| user |address|
| id | id |
|a_id<fk>| - |
- 通過將@JoinColumn改爲@JoinTable,可以使用關聯表進行關聯。
@Entity
public class Shipment {
@OneToOne(fetch = FetchType.LAZY)
@JoinTable(
name = "ITEM_SHIPMENT",
joinColumns = @JoinColumn(name = "SHIPMENT_ID"),
inverseJoinColumns = @JoinColumn(
name = "ITEM_ID",
nullable = false,
unique = true)
)
protected Item auction;
}