我在做一个小的springrestapi项目。我有两个类,它们表示数据库中的两个表。我在要从中检索数据的对象中有一个@onetomanyMap。现在我检索所有嵌套对象,但是我想要的是能够通过int datestamp变量(在我的类中是一个声明为“utcs”的历元)限制嵌套对象的数量。我天真地认为,粗糙的政策可以帮助我,但现在我明白我错了。我希望能够在我的存储库中执行以下操作:
@Repository
public interface TypeRepository extends CrudRepository<Type, Integer> {
List<Type> findByDataUtcsGreaterThan(int utcs);
}
这就是我想要的json结构,以及它现在的样子。但是如何限制数据对象的数量呢?
[
{
"typeKey": "Queue",
"uomId": 1,
"data": [
{
"value": 11,
"utcs": 1605840300
},
{
"value": 15,
"utcs": 1605840360
},
{
"value": 22,
"utcs": 1605840420
}
]
},
{
"typeKey": "Unroutable",
"uomId": 1,
"data": [
{
"value": 196,
"utcs": 1605840300
},
{
"value": 196,
"utcs": 1605840360
},
{
"value": 196,
"utcs": 1605840420
}
]
}
]
具有嵌套对象@onetomany的(type)对象类
@Entity
@Table(name = "SYSTEMSTATSTYPE")
public class Type {
@Id
@Column(name = "ID")
private int id;
@Column(name = "TYPEKEY")
private String typeKey;
@Column(name = "UOMID")
private int uomId;
@OneToMany(mappedBy = "type", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<Data> data = new ArrayList<>();
public Type() {
super();
}
public Type(String typeKey, int uomId) {
this.typeKey = typeKey;
this.uomId = uomId;
}
// Getters and setters
}
(数据)对象类@manytone
@Entity
@Table(name = "SYSTEMSTATSDATA")
public class Data {
@Id
@Column(name = "ID")
private int id;
@Column(name = "VALUE")
private int value;
@Column(name = "UTCS")
private int utcs;
@JsonIgnore
@ManyToOne
@JoinColumn(name = "TYPEID")
private Type type;
public Data() {
super();
}
public Data(int value, int utcs, Type type) {
super();
this.value = value;
this.utcs = utcs;
this.type = type;
}
// Getters and setters
}
2条答案
按热度按时间iyfamqjs1#
这是不可能的。您可以为每个
Type
对象,或者可以使用类似blaze persistence实体视图的东西,该视图具有限制集合元素的本机支持。我创建了这个库,以便在jpa模型和自定义接口或抽象类定义的模型之间进行简单的Map,比如spring数据在steroids上的投影。其思想是以您喜欢的方式定义目标结构(域模型),并通过jpql表达式将属性(getter)Map到实体模型。
对于blaze持久性实体视图,用例的dto模型可以如下所示:
查询是将实体视图应用于查询的问题,最简单的就是按id进行查询。
TypeDto a = entityViewManager.find(entityManager, TypeDto.class, id);
spring数据集成允许您像spring数据投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_us/index.html#spring-数据特征beq87vna2#
我不认为直接使用注解是有可能的,而且在大多数情况下,使用急切获取也不是一个好主意。我认为您必须自己用一个自定义查询来构建逻辑,或者只获取2个数据对象(如这里所述)https://www.baeldung.com/jpa-limit-query-results),或一个连接,让您可以立即输入数据。