I ever posted a same question before. I use the composite primary key for my class
@Entity @Table(name="group_members") @IdClass(MembershipPK.class) public class Membership implements Serializable { private long groupId; private long personId; public Membership() {} @Id @Column(name="GROUP_ID", nullable = false, insertable = false, updatable = false) public long getGroupId() {return groupId;} public void setGroupId(long groupId) {this.groupId = groupId;} @Id @Column(name="PERSON_ID") public long getPersonId() {return personId;} public void setPersonId(long personId) {this.personId = personId;} } @Embeddable public class MembershipPK implements Serializable{ private long groupId; private long personId; public MembershipPK() {} public MembershipPK(long groupId, long personId) { this.groupId = groupId; this.personId = personId; } public long getGroupId() {return groupId;} public void setGroupId(long groupId) {this.groupId = groupId;} public long getPersonId() {return personId;} public void setPersonId(long personId) {this.personId = personId;} }
[org.hibernate.hql.ast.HqlSqlWalker] processQuery() : ( SELECT ( {select clause} (membership0_.personId, membership0_.groupId) ) ( FromClause{level=1} group_members membership0_ ) )