I want to map a class to a table and a subclass to another table. I’m not sure if you can do this in a proper way. I tried this so far:
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "MyTable1")
public class MyClass
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "MyTable2")
public class MySubclass extends MyClass
It works but in the generated SQL both tables are joined and I want to keep them seperated.
Another approach was to use the same as above but change JOINED to TABLE_PER_CLASS. This does not work because there is a UNION ALL on both tables in the SQL when I query MyClass.
I also tried to use @org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT) and @org.hibernate.annotations.Entity(polymorphism = PolymorphismType.IMPLICIT) but with no effect.
So my question is if there is a way to map this in Hibernate. Any suggestions?
Thanks!
Using Hibernate 3.6.1
It seems you want to consider the two entities as completely unrelated, except for the fields they have in common. It’s not really an inheritance relationship since when you search for a MyClass, you don’t want MySubclass instances to be found, although MySubClass instances are instances of MyClass in your design.
The best solution is thus probably to use a
MappedSuperclass(see chapter 2.2.4.4) which contains the common fields and methods, and to create two completely separate entities which extend this mapped super class.