java - 如何使用 @ElementCollection 进行设置映射?
问题描述
我有 2 张桌子。report_id
是PK。animals_in_area
没有PK密钥。
我需要检查给定的和animal_id
中的一个。这似乎是一个简单的任务,但我能以某种方式描述类中的一个字段,映射到请求的区域吗?我试过+ ,但由于注释,它会自动映射到。animal_report
report_id
report_date
Set<Integer> adimalIds
animal_report
@ElementCollection
@CollectionTable
report_id
area_id
@Id
@ElementCollection
@CollectionTable(name = "animals_in_area", joinColumns = @JoinColumn(name = "area_id"))
@Column(name = "animal_id")
private Set<Integer> adimalIds = new HashSet<>();
我想criteriaBuilder.isMember(animalIdRequest, adimalIds)
在 DTO 中使用。
经典的方法是什么?加入并获得 Set ?
animal_report animals_in_area
--------------------------------- -------------------
report_id | report_date | area_id area_id | animal_id
--------------------------------- -------------------
1 | 01.01.2020 | 100 100 | 1001
2 | 01.01.2020 | 101 100 | 1002
100 | 1003
..... 101 | 1002
101 | 1004
@Entity
@Table(name = "animal_report")
public class AnimalReport implements Serializable {
@Id
@Column(name = "report_id")
private Long reportId;
@Column(name = "report_date")
private LocalDate reportDate;
@Column(name = "area_id")
private Integer areaId;
...
}
解决方案
您应该通过以下方式更正您的映射:
@Entity
@Table(name = "animal_report")
public class AnimalReport implements Serializable {
@ElementCollection
@CollectionTable(name = "animals_in_area", joinColumns = @JoinColumn(name = "area_id", referencedColumnName = "area_id"))
@Column(name = "animal_id")
private Set<Integer> animalIds = new HashSet<>();
// ...
}
您必须使用该列,referencedColumnName
因为该animals_in_area.area_id
列引用的不是表的主键列animal_report
。
推荐阅读
- vba - VBA 沿着一行循环
- firebase - codelabs.com 中 Firebase Web 开发教程的问题
- ios - Swift-使用委托在 tableView 上显示
- c# - 如何在 WebMethod 中返回一个长度很长的字符串?
- angular - 指令中的 Angular 9 访问组件
- javascript - 同一页面上的多个放置区会导致出现错误
- solr - 索引后 Solr 提交失败
- c# - 你如何从一个进程c#中调用另一个进程
- c++ - FormatDateTime - 整数算术溢出 C++
- ruby-on-rails - after_create 回调中的 ActiveJob::DeserializationError - 未找到记录