鉴于有两个表
client
和device
具有一个(client)对多(devices)关系。该表的简化模式是:
TABLE client (
id,
import_date,
PRIMARY_KEY (id, import_date)
)
和
TABLE device (
id,
import_date,
client_id,
PRIMARY_KEY (id, import_date),
FOREIGN_KEY (client_id -> client.id, import_date -> client.import_date)
)
注意:列
device.import_date
是主键的一部分,也是外键的一部分。
不幸的是,我没有在JPA中描述上述结构。
这是我的拙劣尝试(getters、setters、实现接口等略):
public class ImportId {
private Integer id;
private LocalDate importDate;
}
@Entity
@IdClass(ImportId.class)
public class Client {
@Id
private Integer id;
@Id
private LocalDate importDate;
}
@Entity
@IdClass(ImportId.class)
public class Device {
@Id
private Integer id;
@Id
private LocalDate importDate;
@ManyToOne
//@MapsId("importDate") <-- does not work
//@JoinColumn
//@JoinColumn <-- also not working
private Client client;
}
将
@MapsId
与 @IdClass
一起使用并没有什么特别之处,导致在 client_import_date
表中增加了一个额外的列 device
,这是不可取的。
我也尝试过将
@MapsId
与 @Embeddable
结合使用但没有成功。它失败了
org.hibernate.PropertyNotFoundException: Could not locate field name [id] on class [java.time.LocalDate]
有人可以帮我解决这个问题吗?
非常感谢!