一对一/多对一关系的休眠条件



我在两个对象之间有一个OneToMany/ManyToOne关系,例如:

public class Company {
    private Long compid;
    private String companyName;
    @OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Employee> employees;
}
public class Employee {
    private Long empid;
    private String fstName;
    private String lstName;
    private String sal;
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @NotFound(action = NotFoundAction.IGNORE)
    @JoinColumn(name = "compid", nullable = true)
    private Company company;
}

我想得到那些有company.companyName like xxxx%的员工.我尝试了类似的东西:

Criteria criteria = session.createCriteria(Employee.class);
criteria.createAlias("company", "company");
criteria.add(Restrictions.like("company.companyName ", "xxxx%"));
return criteria.list();

但是我得到错误:

could not resolve property: company.companyName of: Employee

此代码中的问题在哪里?

你应该使用criteria.createCriteria而不是criteria.createAlias

您在第 3 行条件中添加了类似 "company.companyName " 的空格。是错别字吗?如果不是,那么这就是问题的原因。

我找到了问题的根源,这是我的一个愚蠢的错误,在我的原始代码中我输入了 compny.companyName,我在公司中忘记了一个"a",它工作得很好。