有关更多上下文,请参阅我的其他问题。
我想将我的Employee实体类加入实体类,Code但代码 PK 是复合的(DOMAIN、CODE),因为它列出了许多不同的代码域,但进入 Employee 类/表中的代码都来自一个域,消除了需要在 Employee 类/表中有一个域字段(因为它总是相同的)。
我可以加入员工以代码通过在使用CODE字段员工表和一个硬编码值(例如EMP_TYPE),而不是冗余列?
如果我的Employee类/表确实有那个多余的列,我会像这样加入它:
@JoinColumns({
@JoinColumn(name = "EMP_TYPE_CODE", referencedColumnName = "CODE"),
@JoinColumn(name = "DOMAIN", referencedColumnName = "DOMAIN)})
@ManyToOne(optional = false)
private Code sharedStatute;
Run Code Online (Sandbox Code Playgroud)
但我真的不想在数据库和班级中有额外的列,因为它总是相同的。
我想要完成的将相当于 SQL 中的以下内容:
SELECT e.emp_id, e.first_name, e.last_name, c.description as emp_type
FROM Employee e JOIN Code c
ON e.emp_type_code = c.code
WHERE c.domain = 'EMP_TYPE'
Run Code Online (Sandbox Code Playgroud)
与domain在 Employee 表中添加一个字段并使用相同的值 ('EMP_TYPE') 填充 EVERY SINGLE RECORD 然后执行以下操作相反:
SELECT e.emp_id, e.first_name, e.last_name, c.description as emp_type
FROM Employee e JOIN Code c
ON e.emp_type_code = c.code
AND e.domain = c.domain
Run Code Online (Sandbox Code Playgroud)
前者效率更高,因为它使我不必拥有冗余字段。所以我想做的是同样的事情,但在JPA.
你们中的一些人可能会说“为什么不为每个代码有一个单独的查找表”,但我认为这是一个糟糕的主意,会导致数据库表和相应的应用程序实体混乱。有一个按代码类型(或域)分区的单个代码查找表要好得多。
这应该有效吗?
@JoinColumn(name = "EMP_TYPE_CODE", referencedColumnName = "CODE")
@Where(clause = "domain = 'EMP_TYPE'")
@ManyToOne(optional = false)
private Code sharedStatute;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3587 次 |
| 最近记录: |