gpt4 book ai didi

java - 如何用硬编码值替换@JoinColumn?

转载 作者:行者123 更新时间:2023-12-01 18:20:11 24 4
gpt4 key购买 nike

有关更多上下文,请参阅 my other question

我想将我的 Employee 实体类加入到 Code 实体类中,但代码 PK 是复合的(DOMAIN、CODE),因为它列出了许多不同的代码域,但Employee 类/表中的代码全部来自单个域,因此无需在 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;

但我真的不想在数据库和类中拥有额外的列,因为它总是相同的。

我想要完成的任务相当于 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'

而不是在 Employee 表中添加字段 domain 并使用相同的值('EMP_TYPE')填充每个单条记录,然后执行以下操作:

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

前者效率更高,因为它使我不必拥有冗余字段。所以我想做的是同样的事情,但是在 JPA 中。

你们中的一些人可能会说“为什么不为每个代码都有一个单独的查找表”,但我认为这是一个糟糕的想法,会导致数据库表和相应的应用程序实体困惑。最好有一个按代码类型(或域)分区的代码查找表。

最佳答案

这应该有效吗?

@JoinColumn(name = "EMP_TYPE_CODE", referencedColumnName = "CODE")
@Where(clause = "domain = 'EMP_TYPE'")
@ManyToOne(optional = false)
private Code sharedStatute;

关于java - 如何用硬编码值替换@JoinColumn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27831357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com