gpt4 book ai didi

spring - 使用 Spring Data JPA 从数据库设置 transient 值

转载 作者:行者123 更新时间:2023-12-01 12:40:08 26 4
gpt4 key购买 nike

我想知道是否有办法从数据库中检索生成的值作为额外的列并将其映射到 transient 值。

我会试着解释自己,我希望是这样的:

@Entity
@Table(name = "thing")
public class Thing {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "itemid")
private Long itemId;

private String someValue;

@Transient
private double distance;

// constructors, getters, setters, etc.. (include transient methods)
}

Repository("thingRepository")
public interface ThingRepository extends PagingAndSortingRepository<Thing, Long> {

@Query("SELECT t, cos(someDouble)*sin(:someDouble) AS distance FROM Thing t WHERE someValue = :someValue AND someDouble = :someDouble AND distance > 30")
Page<Thing> findByParams(@Param("someValue") String someValue, @Param("someDouble") double someDouble, Pageable pageable);
}

为简单起见,我使用 @Query 注释,因此我受到限制。 HAVING 子句这是不允许的,当前示例不起作用。

由于我需要存储在数据库中的值以及从服务传递的值,因此我需要从数据库中进行过滤。

或者也许有另一种方法可以做到这一点?

先感谢您。

最佳答案

我认为你可以做这样的事情。通过使用 JPQL 新功能,使用不同的构造函数创建一个新实例。

@Query("SELECT new Thing(t, cos(t.someDouble)*sin(t.someDouble))FROM Thing t WHERE t.someValue = :someValue AND t.someDouble = :someDouble AND cos(t.someDouble)*sin(t.someDouble)> 30")



只需添加如下构造函数。
public class Thing {
// the code you already had

public Thing(Thing t, double distance){
this.itemId = t.itemId;
this.someValue = t.someValue;
this.distance = distance;
}
}

关于spring - 使用 Spring Data JPA 从数据库设置 transient 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25674033/

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