【发布时间】:2016-07-18 11:26:08
【问题描述】:
我有一个数据库,我需要使用 CriteriaBuilder 从 Java 进行联接。
到目前为止我有这个代码:
CriteriaBuilder cb = entman.getCriteriaBuilder();
CriteriaQuery<Company> query = cb.createQuery(Company.class);
Root<Employee> teacher = query.from(Employee.class);
Join<Employee, Company> employees = teacher.join("id");
query.select(employees).where(cb.equal(teacher.get("name"), ""));
List<Company> results = entman.createQuery(query).getResultList();
return results;
在我运行这段代码后(使用 springboot)我得到这个错误:Cannot join to attribute of basic type
有谁知道我应该怎么做才能让它工作?
PS:如果需要,我会提供任何其他信息。 提前致谢。 company database employee database
L.E.: 员工:
@Entity
public class Employee {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
@Size(min = 1)
private String name;
@Column(nullable = false)
@Temporal(TemporalType.DATE)
private Date hire_date;
@ManyToOne
//@JoinColumn(name = "id")
private Company company;
public Employee() {}
public Employee(Long id, String name, Date date, Company company) {
setId(id);
setName(name);
setHire_date(date);
setCompany(company);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getHire_date() {
return hire_date;
}
public void setHire_date(Date hire_date) {
this.hire_date = hire_date;
}
public Company getCompany() {
return company;
}
public void setCompany(Company company) {
this.company = company;
}
}
公司:
@Entity
public class Company {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
@Size(min = 1)
private String name;
@OneToMany(mappedBy="company", cascade = CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval=true)
private Collection<Employee> employees;
public Company() {}
public Company(Long id, String name) {
setId(id);
setName(name);
}
public Company(Long id, String name, Collection<Employee> employees) {
setId(id);
setName(name);
setEmployees(employees);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<Employee> getEmployees()
{
return employees;
}
public void setEmployees(Collection<Employee> employees) {
this.employees = employees;
}
@Override
public String toString() {
return "Company [id=" + id + ", name=" + name + ", employees=" + employees.toString() + "]";
}
}
【问题讨论】:
-
我在这里回答了类似的问题:stackoverflow.com/questions/38251392/…
-
@AlexanderPetrov 谢谢你的回复,我已经读过了,但这并没有帮助我理解我错在哪里......
-
是的,下面的同事是正确的。您不能通过 @Basic 列映射加入。你需要加入这种关系。你需要加入老师。
标签: java eclipse join spring-boot