2016-07-18 3 views
1

私は、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() + "]"; 
    } 

} 
+0

私はここで同様の質問に答えました:http://stackoverflow.com/questions/38251392/hibernate-criteria-api-on-child-table/38251832#38251832 –

+0

@AlexanderPetrovご回答いただきありがとうございます、私は読んでいますそれは、私が間違っていた場所を理解する助けにはなりませんでした。 – R3muSGFX

+0

仲間のうごきが正しいです。 @Basic列マッピングで結合することはできません。あなたは関係に加わる必要があります。あなたは先生に参加する必要があります。 –

答えて

0

あなたは@Columnフィールドに参加することはできませんのでTeacher要素、ないidへの参照を持っている必要があります。 ..

@Columnから

変更IDマッピング:@ManyToOne(または必要に応じて1)と

@Column(name = "id") 
private Integer id; 

協会:予想通り、この後

@ManyToOne 
@JoinColumn(name = "id") 
private Teacher teacher; 

はあなたのjoinは動作します。

+0

私はこれらの注釈を正確に(私は思う)追加しましたが、少し新しいエラーがあるようです...エンティティのエンティティ:エンティティ:エンティティ列のID :("=" false "update =" false ") – R3muSGFX

+0

エンティティが表示されますが、' Company'エンティティの 'Employee.id'のマッピングを削除した場合は' Employee'をマッピングします。もしそうでなければ 'Employee'と'会社のクラスとマッピング –

+0

会社のエンティティ: – R3muSGFX

関連する問題