以下是我的Pojos
@Entity
@Table(name = "XXXXXXXX")
public class MyDTO1 implements Serializable{
@Embeded
private MyDTO2 myDTO2;
private Integer int1;
}
@Embedable
public class MyDTO2 implements Serializable{
private String string1;
}
实际班级:
pulic class Test(){
private void testMethod(){
Session session = getSession();
List<ClientProgramINDTO> clientProgramDto = session.createCriteria(ClientProgramINDTO.Class)
.add(Restrictions.eq("int1", 1))
.add(Restrictions.eq("myDTO2.string1", "Test")).list();
}
}
我收到以下错误消息:
could not resolve property myDTO2.string1 in MyDto1.
答案 0 :(得分:0)
解决方法是使用metamodel
。
我希望this解决您的问题。详细解释一下。
答案 1 :(得分:0)
您的代码中存在一些错误:
实体@Embeded
中 @Embedded
应为MyDTO1
实体@Embedable
@Embeddable
应为MyDTO2
pulic class Test(){
应为public class Test{
ClientProgramINDTO.Class
应为ClientProgramINDTO.class
因此,如果不修复这些编译问题,则无法运行该程序。
此外,您尚未提供ClientProgramINDTO
对象是什么以及它与其他实体的关系,我假设ClientProgramINDTO
与MyDTO1
相同。
如果我根据我的假设继续进行,那么代码中就没有问题。以下是我尝试过的示例代码:
public class Test {
public static void main(String[] args) {
saveData();
testMethod();
HibernateUtil.getSessionFactory().close();
}
private static void saveData() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();
ClientProgramINDTO c = new ClientProgramINDTO();
c.setInt1(1);
c.setMyDTO2(new MyDTO2("Test"));
session.save(c);
session.getTransaction().commit();
}
private static void testMethod() {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.getTransaction().begin();
List<ClientProgramINDTO> clientProgramDto = session
.createCriteria(ClientProgramINDTO.class)
.add(Restrictions.eq("int1", 1))
.add(Restrictions.eq("myDTO2.string1", "Test")).list();
for (ClientProgramINDTO clientProgramINDTO : clientProgramDto) {
System.out.println(clientProgramINDTO.getInt1() + " "+ clientProgramINDTO.getMyDTO2().getString1());
}
session.getTransaction().commit();
}
}
此计划的输出:
1测试