我有两个实体:
@Entity
public class Car {
@Id
private Long id;
@OneToOne
private Engine engine;
}
和另一个:
@Entity
public class Engine {
@Id
private Long id;
@Column
private String value1;
@Column
private String value2;
}
在我的jpaRepositoy界面中,我想这样做:
public interface CarRepository extends JpaRepository<Car, Long> {
public Car findByEngine(Engine engine);
}
但是这个方法不会返回我存储的实体,因为我创建了我的引擎:
Engine engine = new Engine("someValue", "someValue");
不设置存储在数据库中的引擎ID。
所以我想知道是否可以排除像id这样的列? 如果不是,唯一的方法是:
@Query("SELECT c FROM Car c WHERE c.engine.value1 = :value1 and c.engine.value2 = :value2")
findByEngine(@Param("value1") String value1, @Param("value2") String value2)
相关问题:如果我有OneToMany关系而不是OneToOne,比如
@Entity
public class Car {
@Id
private Long id;
@OneToMany
private List<Engine> engines;
}
如何执行此类请求(仍然没有id列):
public Car findByEngines(List<Engine> engines);
非常感谢!
答案 0 :(得分:2)
对于您的方案,此@Query("SELECT c FROM Car c WHERE c.value1 = :value1 and c.value2 = :value2")
不正确的jpql查询,value1
实体中没有value2
和Car
。
正确的是:
@Query("SELECT c FROM Car c WHERE c.engine.value1 = :value1 and c.engine.value2 = :value2").
您可以尝试使用此方法名称,我认为这样可行:
findByEngineValue1AndEngineValue2(String value1, String value2)
但是对于列表一,我认为你不能用方法名称来弥补。