pango,
resolvi esse problema usando a estratégia “Tabela por subclasse” sugerida pelo hibernate. O banco continua o mesmo acima, e as anotações ficaram assim:
package org.ctm.value;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person implements Serializable {
public Person() {
}
@Id
@SequenceGenerator(name="seqPerson", sequenceName="person_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seqPerson")
@Column(name="id")
private int id;
@Column(name="name", nullable=true, length=255)
private String name;
@Column(name="last_name", nullable=true, length=255)
private String last_name;
@Column(name="middle_name", nullable=true, length=255)
private String middle_name;
@Column(name="tax_id", nullable=true, length=255)
private String tax_id;
@Column(name="personal_id", nullable=true, length=255)
private String personal_id;
@Column(name="tax_business_id", nullable=true, length=255)
private String tax_business_id;
@Column(name="create_date", nullable=true)
private java.sql.Timestamp create_date;
@Column(name="update_date", nullable=true)
private java.sql.Timestamp update_date;
@Column(name="description", nullable=true)
private String description;
public void setId(int value) {
this.id = value;
}
public int getId() {
return id;
}
public int getORMID() {
return getId();
}
public void setName(String value) {
this.name = value;
}
public String getName() {
return name;
}
// get's and set's dos outros atributos
}
… e na classe manager:
package org.ctm.value;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="manager")
@PrimaryKeyJoinColumn(name="person_id")
public class Manager extends Person implements Serializable {
public Manager() {
}
@Column(name="login", nullable=false)
private String login;
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
}
para a classe salesman repetir a mesma idéia da classe manager
então, na superclasse colocar:
@Inheritance(strategy = InheritanceType.JOINED)
na classe especialista:
@PrimaryKeyJoinColumn(name=“person_id”)
com essa estratégia funcionou legal, quando vou persistir manager, não preciso inserir em person, pois o hibernate se liga, que os atributos herdados, tem que ser inseridos na tabela person, inclusive o id gerado pela sequence em person, é o id que é gravado na tabela manager.
valew.