0

次のエンティティを使用します。

@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();

次のエラーが発生します。

Hibernate: 
    select
        name0_.id as id1_ 
    from
        NAMES name0_ 
    inner join
        EVENTS event1_ 
            on name0_.id=event1_.name_id 
    where
        event1_.id=?
1-Aug-2012 3:18:31 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 90012, SQLState: 90012
1-Aug-2012 3:18:31 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Parameter "#1" is not set; SQL statement:
select name0_.id as id1_ from NAMES name0_ inner join EVENTS event1_ on name0_.id=event1_.name_id where event1_.id=? [90012-168]

なぜ結合が機能しないのですか?

不思議なことに、この非常によく似たクエリが機能します。

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で機能します

4

0 に答える 0