0

hesk_users以下のように、2つのテーブルがありますuser

@Entity @Table(name="hesk_users") public class UserHesk {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column
private int id;

@OneToOne
@JoinColumn(name="user_id")
private User user;

    set.... get..

}

@Entity @Table(name="user") public class User implement Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;

@NotEmpty
@Column
private String firstname;

     @OneToOne(mappedBy="user")
private UserHesk userHesk; 

    set ... get ... 

}

休止状態のクエリがありますが、機能していません..

            DetachedCriteria detachedCriteria=DetachedCriteria.forClass(UserHesk.class)
    .setProjection(Projections.property("user_id"));

    Criteria criteria=sessionFactory.getCurrentSession().createCriteria(User.class);
    criteria.add(Property.forName("id").notIn(detachedCriteria));
    User user=(User)criteria.list().get(0);
    System.out.println(user.getFirstname());
    System.out.println("Subquery Size "+criteria.list().size());

ファイルのエラーuser_id。関係上手に入らないもの。

4

1 に答える 1

0

HQL および基準クエリは、常にエンティティ クラスとプロパティを使用します。基になるテーブルと列の名前は絶対に使用しないでください。UserHesk クラスにはプロパティがありませんuser_id。プロパティがありuserます。

したがって、コードは

DetachedCriteria detachedCriteria = 
    DetachedCriteria.forClass(UserHesk.class)
                    .setProjection(Projections.property("user.id"));

あるいは

DetachedCriteria detachedCriteria = 
    DetachedCriteria.forClass(UserHesk.class)
                    .createAlias("user", "u")
                    .setProjection(Projections.property("u.id"));
于 2013-03-07T14:29:35.443 に答える