【发布时间】:2020-01-01 12:17:32
【问题描述】:
我有 Person - 一个 JPA 实体,它有几个 @OneToOne 映射到其他一些实体,如地址、房屋和汽车。我想在一个查询中找到拥有特定房屋和特定汽车的人。
例如,如果我们想通过 id 来查找 Person,我们可以使用 findById 方法。如果我们想使用名称查找,我可以在我的存储库中定义一个findByName 方法。
我的问题是:如果我想选择一个设置了 2 个以上字段的人,方法签名是什么?
我已尝试通过仅使用一个属性的方法findByHouse() 选择使用 House。我想使用多个属性进行选择。
人物类:
@Entity(name="Person")
@Table(name="person")
@Data
class Person{
@Column(name="HouseID")
Integer houseID;
@Column(name="CarID")
Integer carID;
@Column(name="AddressID")
Integer addressID;
@OneToOne ( fetch= FetchType.EAGER, cascade = CascadeType.ALL )
@JoinColumn ( name = "houseID" )
private House house;
@OneToOne ( fetch= FetchType.EAGER, cascade = CascadeType.ALL )
@JoinColumn ( name = "carID" )
private Car car;
@OneToOne ( fetch= FetchType.EAGER, cascade = CascadeType.ALL )
@JoinColumn ( name = "addressID" )
private Address address;
}
现在是存储库:
public interface PersonRepository extends JpaRepository<Person,Long>{
@Query("select p from Person p where p.house.id=:id")
Person findByHouse(@Param("id")Integer houseID);
}
我希望有一个 Person 记录,其中房屋、汽车和地址设置为在查询中传递的特定值。
【问题讨论】:
标签: java spring spring-boot jpa