Java Hibernate Basic:当存在复合id时如何查询

Java Hibernate Basic:当存在复合id时如何查询,java,hibernate,Java,Hibernate,我有一个域对象,比如说SalesOrder,它有一个名为id的复合id,由SalesOrder id和repid组成,repid包含在另一个名为SalesOrderID的类中(可序列化,实现equals和hashcode) 我的问题是当我想查询SalesOrder时, createSQLQuery(“来自SalesOrder,其中id=:soID”) soID由salesorder id和repid填充。无论如何,这都是失败的 有人能帮我吗 谢谢,它很可能会失败,因为您正在尝试创建SQL查询。您

我有一个域对象,比如说SalesOrder,它有一个名为id的复合id,由SalesOrder id和repid组成,repid包含在另一个名为SalesOrderID的类中(可序列化,实现equals和hashcode)

我的问题是当我想查询SalesOrder时, createSQLQuery(“来自SalesOrder,其中id=:soID”)

soID由salesorder id和repid填充。无论如何,这都是失败的

有人能帮我吗


谢谢,它很可能会失败,因为您正在尝试创建SQL查询。您应该改用HQL:

Query Query=session.createQuery(“来自SalesOrder so,其中so.id=:id”); setParameter(“id”,salesOrderID); query.list();
如果这是您的问题中的一个输入错误,并且您确实在使用createQuery()方法,那么请发布异常堆栈跟踪。

我在数据库bean类中有一个不正确的映射。抱歉给您添了这么多麻烦,吸取了我的教训,抱歉浪费了您的时间。

您能比“这失败了”更具体一点吗?它到底在说什么?你正在找回0个对象吗?您是否遇到Hibernate异常?正如CHSSLY76所说,这是因为您正在创建SQL查询。如果需要,可以使用SQL查询来实现这一点,但必须使用数据库表列,并且必须将结果映射回实体。最好的选择是只使用HQL。 Query query = session.createQuery("from SalesOrder so where so.id=:id"); query.setParameter("id", salesOrderID); query.list();