我不熟悉hibernate和spring编程,我正在尝试更好地理解注解并使用它。我的问题是,你能不能嵌套构造函数的结果。我当前的Map与此类似。
@SqlResultSetMapping(name="obj",
classes={
ConstrutorResult(targetClass=ClassA.class, columns{
@ColumnResult(name="type1key", type=String.class),
@ColumnResult(name="type1desc", type=String.class),
@ColumnResult(name="type2key", type=String.class),
@ColumnResult(name="type2desc", type=String.class),
...
}
}
)
我想知道你是否可以Map到嵌套类的。因此,我Map到的类包含单独处理数据的类,并且标记为@transient。那么像下面这样的事情是可能的吗?
@SqlResultSetMapping(name="obj",
classes={
@ConstrutorResult(targetClass=ClassA.class, columns{
@ConstrutorResult(targetClass=PropertyClassA.class, columns{
@ColumnResult(name="type1key", type=String.class),
@ColumnResult(name="type1desc", type=String.class)
},
@ConstrutorResult(targetClass=PropertyClassA.class, columns{
@ColumnResult(name="type2key", type=String.class),
@ColumnResult(name="type2desc", type=String.class)
}
...
}
}
)
我知道这不是有效的代码,我只是想知道是否有类似的方法这样做。
2条答案
按热度按时间3b6akqbq1#
我认为您正在压缩问题,@constructorresult将按顺序包含这些值,这是查询的输出。我不明白你为什么在上面的代码片段中提到两个@construtorresult。请详细说明这个问题。
bqujaahr2#
不,这是不可能的。您必须自己在构造函数中构造嵌套对象。
我认为这是blaze持久性实体视图的完美用例。由于blaze持久性支持jpa模型领域中的高级sql概念,因此通常不需要编写本机查询,可以使用blaze持久性实体视图来进行结果Map。
我创建了这个库,以便在jpa模型和自定义接口或抽象类定义的模型之间进行简单的Map,比如spring数据在steroids上的投影。其思想是以您喜欢的方式定义目标结构(域模型),并通过jpql表达式将属性(getter)Map到实体模型。
对于blaze持久性实体视图,用例的dto模型可以如下所示:
查询是将实体视图应用于查询的问题,最简单的就是按id进行查询。
EntityClassA a = entityViewManager.find(entityManager, EntityClassA.class, id);
spring数据集成允许您像spring数据投影一样使用它:https://persistence.blazebit.com/documentation/entity-view/manual/en_us/index.html#spring-数据特征