我想了解如何将 JOIN 与 JPA-spring-repositories 一起使用。 有两张表Man和Car
Man
varchar(25) manId primary key not null
varchar(25) name
varchar(25) surname
varchar(25) modelCar
Car
varchar(25) carId primary key not null,
varchar(25) color,
varchar(25) model;
和可视化:
Man
mainId name surname modelCar
=====================================
111-1 Natasha Smith reno-123
111-2 Maria John mazda-214
Car
carId color model
============================
as-aw red reno-123
os-dz black mazda-214
sa-aa yeallow porche-1
关系是一对一的
我的实体是
@Entity
@Table
@Getter @Setter @NoArgsConstructor
class ManRecord{
private String manId;
private String surname;
private String modelCar;
}
@Entity
@Table
@Getter @Setter @NoArgsConstructor
class CarRecord{
private String carId;
private String color;
private String model;
}
所以,我需要编写 JPA 存储库来执行连接结果: 姓名和汽车颜色:
select m.name, m.surname, c.color from Man m left join Car c on m.modelCar=c.model;
你能帮我吗?
我尝试过
@Repository
public interface ManRepository extends CrudRepository<Man, String>{
@Query("select m.name, m.surname, c.color from Man m left join Car c on m.modelCar=c.model", nativeQuery=true)
List<Object> agregateData();
}
但我不想只获取对象。
而且,我尝试了@OneToOne 的人,但这对我没有帮助
最佳答案
首先,通过汽车
模型连接这些实体并不是一个好主意 - 每个人
可以拥有任何汽车,因此这种连接不具有代表性。最好的方法是将 r_man_id
添加到 Car
表中。它可以让您识别汽车的所有者。
之后,您可以在它们之间添加单向 @OneToMany
关系:
@Entity
@Table
@Getter @Setter @NoArgsConstructor
class ManRecord{
@JoinColumn(name = "r_man_id", referencedColumnName = "manId")
private List<CarRecord> cars = new ArrayList<>();
private String manId;
private String surname;
private String modelCar;
}
@Entity
@Table
@Getter @Setter @NoArgsConstructor
class CarRecord{
private String carId;
private String color;
@Column(name="r_man_id")
private Long refManId;
private String model;
}
然后创建您需要的模型:
class ManWithCarObject {
String name;
String surename;
String color;
/**
* Default
**/
public ManWithCarObject(){
}
public ManWithCarObject(String name, String surename, String color) {
this.name = name;
this.surename = surename;
this.color = color;
}
// other methods
}
然后存储库将是:
@Repository
public interface ManRepository extends CrudRepository<Man, String>{
@Query("select new com.contoso.model.ManWithCarObject(m.name, m.surename, m_c.color) from ManRecord m inner join m.cars m_c where m.manId = m_c.refManId")
List<ManWithCarObject> agregateData();
}
关于java - 你能帮助理解如何使用 JOIN 与 spring-repository 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58024306/