@Entity
@Table(name = "person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person {
@Id
@GeneratedValue
private Long id;
}
@Entity
@Table(name = "service_provider")
public class ServiceProvider extends Person {
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn(name = "id")
private Person person;
}
@Entity
@Table(name = "corporation")
public class Corporation extends ServiceProvider {
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn(name="person_id")
private ServiceProvider serviceProvider;
}
IDao<Corporation> dao = new Dao<Corporation>();
Corporation c = new Corporation();
c.setName("GUJ");
// continua
dao.save(c);
Acontece que pelo que eu entendi, o hibernate deveria inserir Person depois ServiceProvider e em seguinda Corporation
mais isso não esta acontecendo, acontece o seguinte erro;
java.sql.SQLException: Field 'person_id' doesn't have a default value
Nesse caso, todas as minhas três classes compartilham a mesma pk, sendo que a tabela service_provider a pk e fk são as mesma, referenciando a tabela person, e a tabela corporation tem pk e fk de service_provider.
Resumindo, as três tabelas a pk é a a coluna id da tabela person.
Alguém pode me dar uma luz?