我有两个映射表,如下所示(在数据库中,recipient_id是播放器表的外键):
@Entity
@Table(name="recipient_recipient_group")
public class RecipientRecipientGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name="recipient_group_id")
private String recipientGroupId;
@Column(name="recipient_id")
private int recipientId;
//GET, SET
}
和
@Entity
@Table(name = "player")
@Inheritance(strategy = InheritanceType.JOINED)
public class Player {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "ps_id")
private String psId;
//GET, SET and some other stuff not relating to the RecipientRecipientGroup entity
}
我需要编写标准子查询。我尝试了以下子查询:
Criteria criteria = getSession().createCriteria(Player.class);
if(groupId != null){
DetachedCriteria ownerCriteria = DetachedCriteria.forClass(RecipientRecipientGroup.class, "group");
ownerCriteria.setProjection(Property.forName("group.recipient_id"));
ownerCriteria.add(Restrictions.eq("group.recipient_group_id", groupId));
criteria.add(Property.forName("id").in(ownerCriteria));
}
我得到了例外:
org.hibernate.MappingException: Unknown entity: null
org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:548)
org.hibernate.loader.criteria.CriteriaQueryTranslator.getPropertyMapping(CriteriaQueryTranslator.java:518)
org.hibernate.loader.criteria.CriteriaQueryTranslator.getType(CriteriaQueryTranslator.java:477)
org.hibernate.loader.criteria.CriteriaQueryTranslator.getTypeUsingProjection(CriteriaQueryTranslator.java:459)
org.hibernate.loader.criteria.CriteriaQueryTranslator.getTypedValue(CriteriaQueryTranslator.java:509)
org.hibernate.criterion.SimpleExpression.getTypedValues(SimpleExpression.java:71)
我该如何解决?