私は、CriteriaBuilderを使用してJavaからJoinを作成する必要のあるデータベースを用意しています。基準ビルダーで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付き)このコードを実行した後、私はこのエラーを取得:は基本型で
を帰する参加できません誰がどうあるべきか知っています私はそれを動作させるために行うのですか?
PS:必要に応じてその他の情報を提供します。 ありがとうございます。 company database employee database
LE : 従業員:
@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() + "]";
}
}
私はここで同様の質問に答えました:http://stackoverflow.com/questions/38251392/hibernate-criteria-api-on-child-table/38251832#38251832 –
@AlexanderPetrovご回答いただきありがとうございます、私は読んでいますそれは、私が間違っていた場所を理解する助けにはなりませんでした。 – R3muSGFX
仲間のうごきが正しいです。 @Basic列マッピングで結合することはできません。あなたは関係に加わる必要があります。あなたは先生に参加する必要があります。 –