【发布时间】:2017-10-03 15:37:13
【问题描述】:
我有 3 张桌子,但我只对它感兴趣
- 表 A
- A_Cat 中的“金额”字段(这是“A”和“类别”之间的连接表),用于明确定义的 cat_Id 值。此谓词使关系成为 OneToOne 而不是 OneToMany。
这是简化的结构:
CREATE TABLE A
(
a_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50) NOT NULL
);
CREATE TABLE Category
(
cat_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50) NOT NULL
);
CREATE TABLE A_Category
(
a_id INT PRIMARY KEY,
cat_id INT PRIMARY KEY,
amount INTEGER NOT NULL
);
Java 代码:
@Entity
@Table(name = "A")
@SecondaryTable(name = "A_Category", pkJoinColumns = {@PrimaryKeyJoinColumn(name = "a_id")}))
public class ModelA {
@Id
@Column(name = "a_id")
private Long id;
@Column(name = "amount", table = "A_Category")
private Integer amount;
}
这会在 Hibernate 中为所有可能的值生成“A”和“A_Category”之间的连接。
所以,这是我的问题,如何向 SecondaryTable 添加谓词(例如:cat_id = 1)。
可以用注解来完成吗?我用@WhereJoinTable 尝试过,但没有运气。
PS:如果我使用@Formula,我可以得到我想要的,但是如果我想要更多来自A_Category 的字段,那么生成的sql 的性能就不是那么好,并且想避免在我的POJO 中编写sql。
【问题讨论】:
-
可以为
A实体分配多个类别(每次都有不同的数量)吗?如果是,我不知道 Hibernate 但在纯 JPA 中,你需要两个@OneToMany关系(A -> AxCategory和Category -> AxCategory) -
@Al1 是的,
A实体可以分配给多个类别,但我只对 1 个类别感兴趣。其他的用于其他应用程序。 -
如果我理解正确,
A_Category表将始终具有相同的cat_id但不同的a_id和不同的amount?当您说其他类别用于其他应用程序时,这意味着它们(特定的除外)永远不会链接到A entities? -
@Al1
A_Category表是一个真正的@ManyToMany连接表。每个A都有很多cat_id,但对于我的应用程序,我只对其中一个感兴趣 -
我分享了一些观点。由于太长,我发布了一个答案,请随时发表评论以讨论它。主要思想是将技术逻辑保持在实体级别,并在 EJB 级别实现业务逻辑