À l'aide de @Id pour de multiples domaines dans la même classe
Je suis un newbie de mise en veille prolongée et à l'appui d'une application existante qui utilise Hibernate
C'est une pure application de reporting - pas d'insert /update /delete - ne sélectionne que
Je peux voir les objets POJO qui ont l'annotation @Id utilisé dans plus d'un domaine dans la même classe
Ma compréhension était que pour une clé primaire composite - vous besoin d'utiliser @Embeddable et @EmbeddedId
Cependant, ce n'est pas définie dans ma classe et, chose étrange, le code compile et fonctionne correctement
Voici un exemple de mon code :
package com.xyz.vo;
import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.annotations.GenericGenerator;
@Entity(name="com.xyz.vo.Emp")
@Table(name = "TEmployee")
public class Emp implements Serializable {
private java.lang.Integer empId;
@Id
@Column(name = "EMP_ID")
public java.lang.Integer getEmpId(){
return this.empId;
}
public void setEmpId(java.lang.Integer empId){
this.empId=empId;
}
private java.lang.Integer empAge;
@Id
@Column(name = "EMP_AGE")
public java.lang.Integer getEmpAge(){
return this.empAge;
}
public void setEmpAge(java.lang.Integer empAge){
this.empAge=empAge;
}
private String empName;
@Column(name = "EMP_NAME")
public String getEmpName(){
return this.empName;
}
public void setEmpName(String empName){
this.empName=empName;
}
et beaucoup plus de champs dans le pojo - qui n'ont pas le @Id défini
NOTE - ici deux champs ont l'annotation @Id
Je suis confus pourquoi cette compile et fonctionne ?
Merci
akila
OriginalL'auteur akila | 2013-11-06
Vous devez vous connecter pour publier un commentaire.
Selon les Hibernate docs, Hibernate semble permettre de cela, mais il n'est cependant pas JPA conforme.
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e4819
Pour une JPA solution conforme vous devez indiquer l'un des @IDClass pour ce set-up (ou utiliser un EmbeddedId):
http://www.objectdb.com/java/jpa/entity/id
OriginalL'auteur Alan Hay