Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Spring data jpa 使用@OneToOne注释连接两个表实体生成;交叉连接“;而";“内部连接”;预期_Spring Data Jpa_One To One_Cross Join - Fatal编程技术网

Spring data jpa 使用@OneToOne注释连接两个表实体生成;交叉连接“;而";“内部连接”;预期

Spring data jpa 使用@OneToOne注释连接两个表实体生成;交叉连接“;而";“内部连接”;预期,spring-data-jpa,one-to-one,cross-join,Spring Data Jpa,One To One,Cross Join,我有OneTONE表格/实体个人和员工: 每个员工只有一个人,每个人都与一个且只有一个员工关联。 生成的查询do表使用“交叉联接”关键字联接,而“内部联接”更合适 @Entity @Table(name="person") @Data public class Person implements Serializable { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id_Per

我有OneTONE表格/实体个人和员工: 每个员工只有一个人,每个人都与一个且只有一个员工关联。 生成的查询do表使用“交叉联接”关键字联接,而“内部联接”更合适

@Entity
@Table(name="person")
@Data
public class Person implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id_Person", unique=true, nullable=false)
    private long id;

    @Column(nullable=false, length=50)
    private String name;

    @Column(nullable=false, length=255)
    private String EMail;
}

@Entity
@Table(name="employee")
@Data
public class Employee implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id_Employee", unique=true, nullable=false)
    private long id;

    @Column(nullable=false, length=50)
    private String numero;

    @OneToOne(fetch = FetchType.EAGER, optional=false)
    @JoinColumn(name="id_Employee")
    private Person person;
}
存储库:


公共接口EmployeeRepository扩展了Crudepository{
@查询(“从员工e中选择e,其中较低的(e.person.name),如CONCAT(较低的(:name),'%')”)
列出findByName(@Param(“name”)字符串名);
}

以下是生成的查询:

select employee0_.id_Employee as id_Emplo1_0_, employee0_.department as departme2_0_ 
from employee employee0_ 
cross join person person1_ 
where employee0_.id_Employee=person1_.id_Person 
and (lower(person1_.name) like concat(lower(?), '%'))
;
select person0_.id_Person as id_Perso1_2_0_, person0_.EMail as EMail2_2_0_, person0_.name as name3_2_0_ 
from person person0_ 
where person0_.id_Person=?
;

“实体”“员工”“加入”列中存在错误,该列应为id\u Person。 除此之外,我建议使用Querydsl对连接进行细粒度控制。您的查询将如下所示:

query.from(employee).leftJoin(employee.person, person)
.where(person.name.lower().like(name.toLowerCase() + "%")).fetch();