Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用复合主键从另一个表构建映射_Java_Jpa - Fatal编程技术网

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;
  ....
}