问题
How to mix single table type inheritance with join table type in the same inheritance tree? I'm not using hibernate just JPA. I know there is no official support for mixed inheritance by reading the JPA spec. I can't change the architecture. It did worked with hibernate but now I need to implement this using openjpa. I'm looking for some workaround.
回答1:
this is working for me:
Superclass:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE_DISCRIMINATOR")
public class A extends SomeClass implements SomeInteface {
…
@Id
@Column(name = "ID", nullable = false, precision = 0)
public Integer getPk() {
return super.getPk();
}
…
Notice that "SomeClass" is not an entity.
Subclass - "JOIN" inheritance:
@Entity
@SecondaryTable(name = "A_SECOND_TABLE", pkJoinColumns = @PrimaryKeyJoinColumn(name ="ID") )
@DiscriminatorValue("BD")
public class B extends A implements SomeIntefaceB {
…
Create a new table "A_SECOND_TABLE" with join on super class Primary Key "ID". each field that is not in join column and appears in our table is marked like this:
@Basic
@Column(table = "A_SECOND_TABLE", name = "STATUS", nullable = false, precision = 0)
Notice the table value.
Subclass – single table inheritance:
@Entity
public class C extends A implements SomeIntefaceC {...
simple single table inheritance.
来源:https://stackoverflow.com/questions/40679517/how-to-mix-inheritance-type-in-jpa