如何在JPA中将复合外键的一列映射到复合主键的一列

问题描述 投票:0回答:0

鉴于有两个表

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]

有人可以帮我解决这个问题吗?
非常感谢!

java hibernate jpa
© www.soinside.com 2019 - 2024. All rights reserved.