0
我想使用Spring數據來執行連接的查詢,但我的表之一有一個複合鍵,我不知道如何映射實體。休眠複合鍵加入
這裏是數據模型的一個比喻:
table: device
pk=model_id
pk=serial_id
...
table: device_settings
pk=device_settings_id
fk=model_id
fk=serial_id
...
下面是代碼,這不編譯的一個類比由於「的mappedBy」屬性,該屬性是不存在。
@Entity
@Table(name = "device_settings")
public class DeviceSettings {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "device_settings_id")
private Long id;
// Pretty sure this is the problem
@OneToMany(targetEntity = Device.class, mappedBy = "deviceKey", cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "model_id", referencedColumnName = "model_id"),
@JoinColumn(name = "serial_id", referencedColumnName = "serial_id")})
private List<Device> devices;
}
@Entity
@Table(name = "device")
public class Device {
@Id
private DeviceKey deviceKey;
}
...
}
@Embeddable
public class DeviceKey implements Serializable {
private static final long serialVersionUID = -1943684511893963184L;
@Column(name = "model_id")
private Long modelId;
@Column(name = "serial_id")
private Short serialId;
}
謝謝,這樣做的編譯,但它讓我想知道如何可以從關係的非所有者利用Spring Data ...是一個簡單的事實,我可以調用一個實體組合的.findOne()方法一個渴望獲取策略總是會讓我有能力在任何一方執行CRUD操作?謝謝你的回答。 – JonasJSchreiber
@JonasJSchreiber是的,但是你仍然可以用LAZY抓取,只要它在服務級別得到關注。如果您有任何困難,請告訴我們。 – Barath
我想我可能會遇到這個映射的遞歸性問題。如果實體需要持久化,並且每個實體都需要引用另一個實體,那麼您是不是可以潛入調試器中的對象,並且看到它們可以無限地相互引用? – JonasJSchreiber