2016-03-01 263 views
1

我有一個單獨的實體對象A,它與表和表中的1到1映射,另一個實體對象「AjoinB」從單個實體對象擴展並與另一個實體對象連接。由於這個,我得到這個「DTYPE」無效標識符。下面是一個例子JPA「DTYPE」無效標識符

@Entity 
@Table(name="TableA") 
@NamedQuery(...) 
public class A implements Serializable{ 
@EmbeddedId 
private ABC id; 
@Column(name="...") 
//getters/setters 

@Entity 
@Table(name="TableA") 
@NameQuery(...) 
public class AjoinB extends A{ 
@OneToOne 
@JoinColumn({...} 
private B b; 
//gettter/setters 

有沒有人知道如何解決這個問題。我知道做繼承的東西會產生DTYPE,但我的表沒有該列:(

更清楚的是,我可以有一個單獨的表沒有歧視列繼承嗎?它是沒有意義的,實體

+0

解決你怎麼能指望的持久性機制來確定每一行是什麼樣的對象類型?靠魔術? –

+0

這不是關於繼承。 JPA將其視爲繼承,因爲我從父類擴展。這是問題所在 1.創建實體A(單一實體,有人會用這個) 2.我希望有另一個實體,稱爲A-加入了等同於不同的是它的關聯 3.我不知道想要在A-連接中有重複的字段,所以我從A 擴展了4.現在JPA認爲這是單表繼承。 這不是關於汽車和汽車類型的問題。 – SpyClown

+0

如果您有實體的類繼承,並且您沒有將根類的繼承策略定義爲除單個表以外的東西,那麼JPA「認爲」某物是單表繼承。 –

回答

1

很難不完整堆棧跟蹤診斷,但正如你可能已經知道,API docs say

如果@DiscriminatorColumn註釋丟失和鑑別 列是必需的,鑑別的名字列默認爲 「DTYPE」,鑑別器類型爲DiscriminatorType.STRING。

其他answers(也here)建議增加一個明確的@DiscriminatorColumn可以潛在地解決這個問題。不過,我第一個承認這似乎並不是一個確定的,一般的答案。

+0

它沒有工作。在發佈我的問題之前,我做了大量研究。如果我使用表中不存在的@ DiscriminatorColumn,它仍然會抱怨它找不到該列名稱。我想知道是否可以使用@ DiscriminatorColumn作爲數據庫中的現有列 – SpyClown