Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Orm 带有PK实体的JPA命名查询_Orm_Jpa - Fatal编程技术网

Orm 带有PK实体的JPA命名查询

Orm 带有PK实体的JPA命名查询,orm,jpa,Orm,Jpa,我已经使用Netbeans生成了实体类。 我的类有一个复合主键,因此Netbeans为我生成了一个额外的PK实体类。 我希望在实体类中使用NamedQuery,但由于传入命名查询的参数嵌入到PK类中,NamedQuery调用失败,查询似乎不完整 有人能举一个例子来说明我的代码使用NamedQuery时应该是什么样子的,它有一个复合PK(@EmbeddedId关联)?以下操作失败: 立面类别(部分): PK等级(部分): 您应该传递表示主键的who对象,而不仅仅是它的一个字段。如果您需要查询部分p

我已经使用Netbeans生成了实体类。 我的类有一个复合主键,因此Netbeans为我生成了一个额外的PK实体类。 我希望在实体类中使用NamedQuery,但由于传入命名查询的参数嵌入到PK类中,NamedQuery调用失败,查询似乎不完整

有人能举一个例子来说明我的代码使用NamedQuery时应该是什么样子的,它有一个复合PK(@EmbeddedId关联)?以下操作失败:

立面类别(部分):

PK等级(部分):


您应该传递表示主键的who对象,而不仅仅是它的一个字段。如果您需要查询部分pk,请在where子句中引用它:
where pk.fld=
您应该传递表示主键的who对象,而不仅仅是它的一个字段。如果您需要查询pk的一部分,请在where子句中引用:
where pk.fld=

谢谢Bozho,您可以发布一些示例代码吗?NamedQuery的WHERE子句中已包含“WHERE e.eMyEntityPK.comp1Id=:comp1Id”。谢谢你。让我看看你的查询和你的实体,谢谢Bozho,你能发一些示例代码吗?NamedQuery的WHERE子句中已包含“WHERE e.eMyEntityPK.comp1Id=:comp1Id”。谢谢。显示您的查询和实体,以及pk objectshow异常和StackTrace。我看不到任何错误。命名查询是正常的。哪里有问题?显示异常和堆栈跟踪我看不到任何错误。命名查询是正常的。你哪里有问题?
@Stateless
public class EMyEntityFacade extends AbstractFacade<EMyEntity> {

public EMyEntityFacade() {
    super(EMyEntity.class);
}

//does not work
/*
private Query queryByComp1Id(int comp1Id) {
    Query query = this.getEntityManager().createNamedQuery("EMyEntity.findByComp1Id");
    query.setParameter("comp1Id", comp1Id);
    return query;
}
*/

//any nearer?
private Query queryByComp1d(int comp1Id) {
    EMyEntityPK eMyEntityPK = new EMyEntityPK();

    Query query = this.getEntityManager().createNamedQuery("EMyEntity.findByComp1Id");

    eMyEntityPK.setComp1Id(comp1Id);

    //how do I pass the eMyEntityPK through to the Entity so the query is well formed? 
    //???

    return query;
}

public List<EMyEntity> findByComp1Id(int comp1Id) {
    Query query = queryByComp1Id(comp1Id);
    return query.getResultList();
}
@Entity
@Table(name = "my_entity")
@NamedQueries({
    @NamedQuery(name = "EMyEntity.findByComp1Id",
    query = "SELECT e FROM EMyEntity e WHERE e.eMyEntityPK.comp1Id = :comp1Id"),...)})

public class EMyEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected EMyEntityPK eMyEntityPK;
    @Basic(optional = false)
    @Column(name = "inherit_from_parent")
    ...
    ...
}
@Embeddable
public class EMyEntityPK implements Serializable {
    @Basic(optional = false)
    @Column(name = "comp1_id")
    private int comp1Id;
    @Basic(optional = false)
    @Column(name = "comp2_id")
    private int comp2Id;
    ...
    ...
}