我想知道是否有一种方法可以从数据库中将生成的值作为额外的列检索并将其映射到瞬态值。
我会尽力解释自己,我希望是这样的:
@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
在t.someValue =:someValue和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;
}
}