使用EmbeddedId的Hibernate Criteria无法生成正确的sql查询

时间:2017-04-16 00:10:56

标签: java sql hibernate criteria

我的班级有以下映射:

@Entity
Class A{
    @EmbeddedId 
    B id;
    String notImportant;
}

@Entity
Class B {
    C c;
}

Class C {
String name;
}

当我使用以下标准时:

Criteria criteria = getCurrentSession().createCriteria(A.class);
criteria.createAlias("id.c", "c");
criteria.add(Restrictions.eq("c.name", "Whatever"));
criteria.list();
Hibernate: 
    /* criteria query */ select
        this_.notImportant as DOAT2_77_0_ 
    from
        A this_ 
    where
        c.name=?

2017-04-15 21:03:02,211 ERROR [org.hibernate.util.JDBCExceptionReporter] - ORA-00904: "c"."name": identificador inválido

所以我明白所识别的“c”将由内部联接定义...... 由于标准使用此标识符而没有声明......

1 个答案:

答案 0 :(得分:0)

  • 课程B必须使用@Embeddable;
  • 进行注释
  • 同时检查班级B是否包含getCsetC方法;

如果错误仍然存​​在,请发布完整代码。 : - )