【发布时间】:2011-08-11 23:05:23
【问题描述】:
我有一个以 PersonEntity 和 QuestionEntity 作为其主键的实体 (PersonQuestionsEntity)。我使用复合键来反映这种关系。
现在,我想创建一个 Criteria 对象,它可以执行以下操作:查找给定 questionId 和一个人的年龄的所有 PersonQuestion 实体。
这是我为此创建标准的尝试:
Session session = getHibernateTemplate().getSessionFactory().openSession();
Criteria criteria = session.createCriteria(PersonQuestionsEntity.class);
criteria.add(Restrictions.eq("question.questionId", "87"));
criteria = criteria.createCriteria("person");
criteria.add(Restrictions.eq("age", 23));
criteria.setMaxResults(100);
List l = criteria.list();
问题是我得到这个错误:
Caused by: java.sql.SQLException: ORA-00904: "PERSONENTI1_"."AGE": invalid identifier
在生成的 SQL 中,此人似乎被引用为 PERSONENTI4,而不是 PERSONENTI1。如果我复制 SQL 并使用 PERSONENTIT4 而不是 PERSONENTI4 运行它,它可以工作(有点——它似乎在做某种笛卡尔连接)。
关于我可能做错了什么的任何线索?我对使用 Hibernate 很陌生。
PersonQuestionsEntity
@Entity
@IdClass(com.anonymous.model.PersonQuestionsKey.class)
@Table(name = "PERSON_QUESTIONS")
public class PersonQuestionsEntity implements Serializable
{
private static final long serialVersionUID = -8254277382097937813L;
@Id
@ManyToOne
@JoinColumn(name = "USER_NAME", nullable = false)
private PersonEntity person;
@Id
@ManyToOne
@JoinColumn(name = "QUESTION_ID", nullable = false)
private QuestionEntity question;
@Column(name = "THEIR_ANSWER")
private int theirAnswer;
}
个人实体
@Entity
@Table(name = "PERSON")
public class PersonEntity implements Serializable
{
private static final long serialVersionUID = -1699435979266209440L;
@Id
@Column(name = "USER_NAME", length = 20, nullable = false)
private String userName;
@Column(name = "USER_NAME_REAL", length = 20, nullable = false)
private String userNameReal;
@Column(name = "AGE", nullable = false)
private int age;
}
PersonQuestionsKey
@Embeddable
public class PersonQuestionsKey implements Serializable
{
private static final long serialVersionUID = -264160855961369405L;
@Id
@ManyToOne
@JoinColumn(name = "USER_NAME", nullable = false)
private PersonEntity person;
@Id
@ManyToOne
@JoinColumn(name = "QUESTION_ID", nullable = false)
private QuestionEntity question;
}
【问题讨论】:
-
你是怎么解决这个问题的?
-
@MikhailBatcer 老实说我不记得了。今晚或明天我会检查代码,看看我是否能弄清楚我做了什么——已经有一段时间了,这只是一个爱好项目。
标签: java hibernate persistence criteria