欲瞭解更多信息,請參閱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 –