2011-10-07 64 views
0

我想使用混合@Inheritance策略,但Hibernate不支持它。
有什麼辦法實現JOINED沒有實際的類繼承繼承。 例如:Mock JOINED繼承策略沒有實際繼承

@Entity 
@Table(name="A") 
@Inheritance(strategy=InheritanceType.JOINED) 
public class A { 
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_SEQ") 
    private Long id; 

    //getters 
    //setters 
} 

@Entity 
@Table(name="B") 
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) 
public class B { 
    @Id 
    private Long id; 

    //getters 
    //setters 
} 

所以,基本上在B我只是想指不從A延伸A到@id產生。

回答

1

我找到了解決辦法。 JPA不允許您合併@Id@OneToOne。但@MapsId詮釋訣竅:

@Entity 
public class A { 
    @Id 
    private Long id; 

    //getters 
    //setters 
} 

@Entity 
public class B { 
    @Id 
    private Long id; 

    @MapsId 
    @OneToOne(optional=false, fetch=FetchType.EAGER) 
    @JoinColumn(nullable=false, name="id") 
    private A a; 

    //getters 
    //setters 
} 
+0

非常好。謝謝。 – Alex

0

我想你可以通過一個@OneToOne關係或者@OneToMany做到這一點,並指出表名這樣

@Id @OneToOne 
    @JoinColumn(name = "id") 
    private A a; 
+0

感謝您的回答。但不幸的是,你可以看到[這裏](http://stackoverflow.com/questions/787698/jpa-hibernate-one-to-one-relationship)Id註釋不能與OneToOne結合使用。 – jFrenetic

+0

我找到了解決方案。如果你有興趣,請檢查一下。 – jFrenetic