Java Hibernate查询复合键

Java Hibernate查询复合键,java,mysql,hibernate,postgresql,Java,Mysql,Hibernate,Postgresql,我正在尝试使用@Embeddeble执行复合键查询 这是我到目前为止所做的 @Embeddable public class IfasvVendorPK implements Serializable{ @Column(length = 4, nullable = false) protected String peId; @Column(length = 8, nullable = false) protected String peAddrCd; 实体 @Entity public cl

我正在尝试使用@Embeddeble执行复合键查询

这是我到目前为止所做的

@Embeddable
public class IfasvVendorPK implements Serializable{

@Column(length = 4, nullable = false)
protected String peId;
@Column(length = 8, nullable = false)
protected String peAddrCd;
实体

@Entity
public class IfasvVendor implements Serializable {

@EmbeddedId
private IfasvVendorPK ifasvVendorPK;
质疑

该列表包含两个PK。不确定我是否应该为此使用列表

            Query query = session.createQuery("from IfasvVendor t0 where     t0.ifasvVendorPK.peId=:id");
            query.setParameter("id", list);
            query.list();

我也不确定在查询工作完成后如何获取对象

我认为以下方法应该有效:

Query query = session.createQuery("from IfasvVendor t0 where t0.ifasvVendorPK.peId in (:id)");
query.setParameterList("id", list);

query.list();
必须在查询中将命名参数括在括号中,并使用setParameterList。有关setParameterList,请参见javadoc

查询结果将出现在返回的列表中:
query.list()
。这将返回一个未选中的列表,您可能希望将其强制转换为
列表


顺便说一句,这不是一个复合键查询。请参阅@Perception comment…

这不是复合键查询,您正在通过复合键中的属性进行搜索。请确认这是您正在努力实现的目标。在任何情况下,如果要传递属性列表,则当前查询都是不正确的。改为使用此选项-
来自IFASVvendorT0,其中t0.ifasvVendorPK.peId位于:idList
query.setParameter(“idList”,list)
。我相信您和您的看法是正确的。我还没有机会回去尝试修复,但它看起来很有希望。