欲了解更多信息,请参阅my other question。如何用硬编码值替换@JoinColumn?
我想加入我的Employee
实体类到Code
实体类,但代码PK是复合(DOMAIN,CODE),因为它列出了许多不同的代码域,但Employee类/表中的代码全部来自一个单一的域,不需要在Employee类/表中有一个域字段(因为它永远都是一样的)。
我可以通过在雇员表和硬编码的值(例如EMP_TYPE),而不是一个冗余列使用CODE字段加入雇员到代码?
如果我员工类/表确实有多余的专栏中,我会参加这样的:
@JoinColumns({
@JoinColumn(name = "EMP_TYPE_CODE", referencedColumnName = "CODE"),
@JoinColumn(name = "DOMAIN", referencedColumnName = "DOMAIN)})
@ManyToOne(optional = false)
private Code sharedStatute;
,但我真的不希望有额外的列在DB和因为它永远都是一样的。
我试图完成将相当于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'
,而不是在雇员表中增加一个字段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
。
你们中的一些人可能会说“为什么不为每个代码设置单独的查找表”,但我认为这是一个糟糕的主意,并导致数据库表和相应的应用程序实体混乱。按代码类型(或域)分区单个代码查找表要好得多。
看到这个问题,而不是 https://stackoverflow.com/questions/8924928/hibernate-how-to-use-a-constant-as-part-of-composite-foreign-reference –