gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:50:25 25 4
gpt4 key购买 nike

我有两个实体:

@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 查询不正确,您没有 value1value2Car实体。

正确的应该是:

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

你可以尝试这个方法Name,我认为会起作用:

findByEngineValue1AndEngineValue2(String value1, String value2)

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

关于java - Spring data JPA - 从一个实体参数中排除 ID 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18107692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com