Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用criteria builder在Java上进行连接_Java_Eclipse_Join_Spring Boot - Fatal编程技术网

如何使用criteria builder在Java上进行连接

如何使用criteria builder在Java上进行连接,java,eclipse,join,spring-boot,Java,Eclipse,Join,Spring Boot,我有一个数据库,需要使用CriteriaBuilder从Java进行连接 到目前为止,我有以下代码: CriteriaBuilder cb = entman.getCriteriaBuilder(); CriteriaQuery<Company> query = cb.createQuery(Company.class); Root<Employee> teacher = query.from(Employee.class); Join<Em

我有一个数据库,需要使用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;
公司:

@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() + "]";
    }

}
@实体
公营公司{
@身份证
@生成值
私人长id;
@列(nullable=false)
@尺寸(最小值=1)
私有字符串名称;
@OneToMany(mappedBy=“company”,cascade=CascadeType.ALL,fetch=FetchType.EAGER,orphan=true)
私人收藏员工;
上市公司(){}
上市公司(长id,字符串名称){
setId(id);
集合名(名称);
}
上市公司(长id、字符串名称、集合员工){
setId(id);
集合名(名称);
雇员(雇员);
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共集合getEmployees()
{
返回员工;
}
公共雇员(收款雇员){
这是。雇员=雇员;
}
@凌驾
公共字符串toString(){
返回“Company[id=“+id+”,name=“+name+”,employees=“+employees.toString()+”];
}
}

您需要一个
教师
元素,而不是对
id
的引用,因为您不能加入
@列
字段

将id映射从
@列更改为:

@Column(name = "id")
private Integer id;
@ManyToOne
(或所需的)关联:

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

在此之后,您的
加入将按预期工作。

我在这里回答了类似的问题:@AlexanderPetrov感谢您的回复,我已经读过了,但这并没有帮助我理解我错在哪里……是的,同事的吼叫是正确的。不能通过@Basic列映射进行联接。你需要加入这段关系。你需要加入老师的行列。我正确地添加了这些注释(我想),但似乎我有一个稍微新的错误。。。映射实体:entity.Employee列:id(应使用insert=“false”update=“false”进行映射)中的重复列我应该看到您的实体,但如果您有它,请删除
公司
实体中
Employee.id
的映射,只映射
员工
。。。如果没有,请共享
员工
公司
类和映射公司实体:@R3muSGFX请编辑您的问题(如果可能,请发布代码,而不是图像!)我添加了代码。屏幕截图来自数据库。
@ManyToOne
@JoinColumn(name = "id")
private Teacher teacher;