0

我有两个实体:

@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);

非常感谢 !

4

1 回答 1

2

对于您的场景,这不是正确的jpql 查询,@Query("SELECT c FROM Car c WHERE c.value1 = :value1 and c.value2 = :value2")您没有实体。value1value2Car

正确的一个是:

@Query("SELECT c FROM Car c WHERE c.engine.value1 = :value1 and c.engine.value2 = :value2").

你可以试试这个方法名称,我认为这会奏效:

findByEngineValue1AndEngineValue2(String value1, String value2)

但是对于列表一,我认为您不能仅用方法名称来弥补。

于 2013-08-07T17:59:32.817 回答