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
Hibernate OneToOne join生产;“未设置参数”;冬眠_Hibernate_Jpa - Fatal编程技术网

Hibernate OneToOne join生产;“未设置参数”;冬眠

Hibernate OneToOne join生产;“未设置参数”;冬眠,hibernate,jpa,Hibernate,Jpa,与下列实体合作: @Entity @Table(name = "NAMES") public class Name { @Id @GeneratedValue(generator = "increment") @GenericGenerator(name = "increment", strategy = "increment") private Long id; @OneToOne(mappedBy = "name", optional = true)

与下列实体合作:

@Entity
@Table(name = "NAMES")
public class Name {
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private Long id;

    @OneToOne(mappedBy = "name", optional = true)
    private Event event;
}

@Entity
@Table(name = "EVENTS")
public class Event{
    @Id
    @GeneratedValue(generator = "increment")
    @GenericGenerator(name = "increment", strategy = "increment")
    private Long id;

    @OneToOne(optional = false)
    private Name name;
}
以及以下JPQL查询:

SELECT n FROM Name n JOIN n.event e WHERE e=:uref
使用以下命令执行查询:

String queryString = "SELECT n FROM Name n JOIN n.event e WHERE e=:uref";
List<Name> result = entityManager.createQuery(queryString, Name.class)
            .setParameter("uref", userRef).getResultList();
为什么加入不起作用

奇怪的是,这个非常相似的查询也能工作:

SELECT e.name FROM Event e WHERE e=:uref
Hibernate: 
    select
        name1_.id as id1_ 
    from
        EVENTS event0_ 
    inner join
        NAMES name1_ 
            on event0_.name_id=name1_.id 
    where
        event0_.id=?
这在Hibernate4.1.5.SP1和4.1.0.Final中进行了尝试


注意:第一个查询在OpenJPA中工作

您能告诉我们如何创建和执行查询吗?你没有忘记设置参数吧?我编辑了我的答案。我确实正确设置了参数。我甚至尝试了使用Criteria API的等效查询,得到了相同的结果。编辑了我的问题而不是答案当然…您已经将实体“名称”放置了两次,而不是“事件”实体,请编辑问题。。。也许这种关系不是双向的。。。无论如何,消息错误很少,因为您正确设置了参数,我会开始尝试一些错误,比如使用JOIN FETCH,在e=:uref中添加空格,将查询设置为命名查询,等等,如果所有这些都失败了,调试hibernate!有时经验主义优于理论:PI固定了实体名称。这种关系是双向的,但在一侧是可选的。删除optional=true不能解决此问题。作为一种解决方法,我使用第二个查询来反转连接的顺序。
SELECT e.name FROM Event e WHERE e=:uref
Hibernate: 
    select
        name1_.id as id1_ 
    from
        EVENTS event0_ 
    inner join
        NAMES name1_ 
            on event0_.name_id=name1_.id 
    where
        event0_.id=?