Java 使用复合主键从另一个表构建映射
我的数据库中有以下表格:Java 使用复合主键从另一个表构建映射,java,jpa,Java,Jpa,我的数据库中有以下表格: statement: id | created_date | message 及 及 其中,statement\u balances表在statement\u id和statement\u configuration\u id上有一个复合主键 我的语句实体如下所示: public class Statement implements Serializable { @Id private long id; @Column private String
statement:
id | created_date | message
及
及
其中,statement\u balances
表在statement\u id
和statement\u configuration\u id
上有一个复合主键
我的语句
实体如下所示:
public class Statement implements Serializable {
@Id
private long id;
@Column
private String message
//I'm not sure of which annotations I need here
@OneToMany
private Map<Long, StatementBalance> statementBalancesByConfigId;
....
}
public class Statement implements Serializable {
@Id
private long statmentId;
@Id
private long statementConfigurationId;
@Column
private long balance;
....
}
我的目标是在我的语句
实体内构建类型为Map
的映射。映射将语句配置\u id
映射到余额
;允许我获取链接到此语句的所有语句余额
(由语句配置\u id
键入)
是否可以使用JPA注释构建此地图 是的,这是可能的。一个示例解决方案:
@实体
公共类语句实现可序列化{
@身份证
私人长id;
私有字符串消息;
@OneToMany(mappedBy=“statementId”)
@MapKey(name=“statementConfigurationId”)
私有映射语句balancesbyconfigid;
}
@实体
@表(name=“语句\配置”)
公共类语句配置实现了可序列化{
@身份证
私人长id;
@OneToMany(mappedBy=“statementConfigurationId”)
私人收款表余额;
私有字符串名称;
私人字符串货币;
}
StatementBalancesId
复合主键类和StatementBalances
实体类允许通过在它们之间创建两个双向关系来建模三元关联:
公共类语句BalanceSID实现可序列化{
长语句ID;
长语句配置;
//不需要参数构造函数、等于、哈希代码
}
@实体
@表(name=“报表余额”)
@IdClass(StatementBalancesId.class)
公共类语句实现可序列化{
@身份证
@许多酮
@JoinColumn(name=“语句配置id”)
专用语句配置语句配置ID;
@身份证
@许多酮
@JoinColumn(name=“statement\u id”)
私有语句语句ID;
@纵队
私人长期余额;
}
以这种方式创建的数据库表与问题中的数据库表相同
public class Statement implements Serializable {
@Id
private long id;
@Column
private String message
//I'm not sure of which annotations I need here
@OneToMany
private Map<Long, StatementBalance> statementBalancesByConfigId;
....
}
public class Statement implements Serializable {
@Id
private long statmentId;
@Id
private long statementConfigurationId;
@Column
private long balance;
....
}