I have a table with a composite Id of two fields, one autogenerated and one Foreign Key. In the Entity class I have the following Code:
@Entity @Table(name = "personascambios") public class PersonasCambios implements Serializable { private static final long serialVersionUID = 1L; @EmbeddedId protected PersonasCambiosPK personasCambiosPK; @Basic(optional = false) @Column(name = "activo") private short activo; @Basic(optional = false) @Column(name = "dt_afecta") @Temporal(TemporalType.TIMESTAMP) private Date dtAfecta; @Basic(optional = false) @Column(name = "usu_afecta") private String usuAfecta; @JoinColumn(name = "idPersona", referencedColumnName = "idPersona", insertable = false, updatable = false) @ManyToOne(optional = false) private Personas personas;
And in the Id Class I have the following code:
@Embeddable public class PersonasCambiosPK implements Serializable { @Basic(optional = false) @Column(name = "idPersonaCambio") @GeneratedValue(strategy=GenerationType.IDENTITY) private long idPersonaCambio; @Basic(optional = false) @Column(name = "idPersona") private long idPersona;
It's that the right way to declare the autogenerated field? How should I persist the PersonasCambios entity? I create a new PersonasCambiosPK object, and set the idPersonaCambio to 0L, and the idPersona to an id obtained from de DB, it works the first time, but when I want to persist a new PersonasCambios using the same idPersona, the application throws an Entity Exists Exception.
Thanks for your help in advance.
http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#mapping-types-entitiesvalues
You can also generate properties inside an @EmbeddedId
class.
I would like to see a working example of this.