Mapeando Múltiplas Classes para uma Tabela no Hibernate, Sem uma Coluna DTYPE

Eu tenho duas classs de hibernação: uma class base e uma class estendida que possui campos adicionais. (Esses campos são mapeados por outras tabelas.)

Por exemplo, eu tenho:

@Entity @Table(name="Book") public class A { private String ID; private String Name; // ... } @Entity @Table(name="Book") public class B extends A { public String node_ID; // ... } public class Node { public String ID; // maps to B.node_ID // ... } 

Como faço para mapear isso no Hibernate? A documentação de hibernação indica três tipos de configurações de inheritance: uma tabela por class, uma tabela com uma coluna de tipo e uma tabela de junit – nenhuma delas se aplica aqui.

A razão pela qual eu preciso fazer isso é porque a class A é da estrutura genérica que é reutilizada em vários projetos, e a class B (e Node) são extensões específicas de um projeto – elas não serão usadas novamente. No futuro, talvez eu tenha uma class C com um house_ID ou algum outro campo.

Edit: Se eu tentar a configuração pseudo-código acima (duas entidades mapeadas para a mesma tabela) recebo um erro que a coluna DTYPE não existe. O HQL tem um “onde DTYPE =” A “acrescentado.

Isso é possível mapeando o @DiscriminatorColumn e o @DiscriminatorValue para os mesmos valores para as duas classs; isso pode ser de qualquer coluna que você usa que tenha os mesmos dados, independentemente de qual tipo (não tenho certeza se funciona com valores nulos).

As classs devem ser assim:

 @Entity @Table(name="Book") @Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="published") @DiscriminatorValue(value="true") public class A { private String ID; private String Name; // ... } @Entity @Table(name="Book") @DiscriminatorValue(value="true") public class B extends A { public String node_ID; // ... }