繁体   English   中英

Spring数据JPA - 从一个实体参数中排除ID列

[英]Spring data JPA - Exclude ID column from one entity parameter

我有两个实体:

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

非常感谢 !

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

正确的将是:

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

您可以尝试使用此方法名称,我认为这样可行:

findByEngineValue1AndEngineValue2(String value1, String value2)

但对于列表一,我认为你不能用方法名称弥补它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM