2017-04-26 34 views
1

我有兩個表具有相同的列集:爪哇 - 休眠:與繼承人映射類的上市同時返回父類的內容及其繼承人

CREATE t1 
(
    id INTEGER NOT NULL 
); 

CREATE t2 
(
    id INTEGER NOT NULL 
); 

它們映射到類C1和C2延伸C1:

@Entity 
@Table(name = "t1") 
public class c1 
{ 
    @Id 
    @Column 
    protected Integer id; 
} 

@Entity 
@Table(name = "t2") 
public class c2 extends c1 
{ 
} 

當我做

Criteria criteria = this.getSession().createCriteria(c1.class).list(); 

它無論從表T1和T2選擇,所以我得到的行從兩張表中選擇一個,而不僅僅是t1。如果我從c2類刪除繼承問題消失,但我想保留它。我如何才能使列表返回數據只從t1表?

回答

0

選項之一將是一個抽象的MappedSuperclass,將持有的共同價值的創造,但不會被視爲一個實體:

@MappedSuperclass 
public abstract class BaseEntity{ 

    @Id 
    @Column(name = "id") 
    protected Integer id; 
} 


@Entity 
@Table(name = "t1") 
public class c1 extends BaseEntity 
{ 

} 

@Entity 
@Table(name = "t2") 
public class c2 extends BaseEntity 
{ 
} 

如果需要,如果需要,您還可以覆蓋列:

@AttributeOverride(name="id", [email protected](name="t2_id")) 
@Entity 
@Table(name = "t2") 
public class c2 extends BaseEntity 
{ 
} 
+0

的問題是,c1爲從遺傳代碼,我想避免改變。 – user1032836