我正在使用Hibernate进行SQL查询。获得MyEntity
bean列表后,我想创建一个CustomEntity
bean列表,其中包含与MyEntity相同的数据,但只包含我想要的字段。我想创建这个CustomEntity,因为我不想将所有信息发送回客户端,但是当我从数据库中检索时,我想要检索所有信息。我不想在查询中选择列。实现此CustomEntity bean并将值加载到其中的正确模式是什么?
答案 0 :(得分:0)
一种方法是编写一个转换器,它将获取您的实体列表并将其转换为客户实体并返回该对象。另一种方法是使用继承(hibernate继承)然后触发相同的查询,但我认为在你的情况下它不是必需的所以我会采用第一种方法。我猜这里是你需要在视图上显示这个自定义对象。如果这是您正在这样做的原因,那么您应该使用DTO并编写一个转换器,将您的实际实体转换为自定义实体。
以下是一些链接Wiki DTO& Transfer Object Pattern
答案 1 :(得分:0)
我认为只有当你有一个新的Entity CustomEntity(带有必需的列)时你才能这样做。例如
<强> myEntity所强>
class MyEntity{
private long id;
private String att1;
private String att2;
}
如果您只想在CustomEntity中使用att1,那么您必须创建
<强> CustomEntity 强>
class CustomEntity{
private long id;
private String att1;
}
然后在你的控制器中获取MyEntity的所有列表,然后创建像
这样的CustomEntity List<MyEntity> me=MyEntity.all(); //return List of MyEntity
for(MyEntity m:me){
CustomEntity cm=new CustomEntity();
cm.setAtt1(m.getAtt1); //setter and getter
CustomEntity.create(cm); //create method of CustomEntity
}
List<CustomEntity> cmList=CustomEntity.all(); //get List of all Customentity
然后,如果您已完成,则可以删除所有CustomEntity
答案 2 :(得分:0)
如果这是关于过滤JSON响应的某些属性,您可以简单地在您不想序列化的字段上添加一些@JsonIgnore
注释。对于您可能希望以不同方式序列化同一对象的多个响应,这通常是不够的。
确实有一种解决方案是为每个响应创建DTO,并将其与Jackson一起使用。 A&#34;简单&#34; for循环并创建所需的对象。这在例如json序列化中不必处理双向的方式是万无一失的,但它可能需要您生成大量代码。
另一种方式是JsonViews
,您可以在其中定义要序列化的内容。我不能告诉你很多,因为我从未使用它。
我最喜欢的方式是JsonFilter
。这与视图类似,但只有&#34;只有&#34; jackson中一个非常基本的实现,允许对特定类进行过滤。
就在昨天,我创建了一个github项目,该项目应该基于绝对路径处理过滤。 (蚂蚁风格) 这是链接。可能它满足了你的需求。
https://github.com/Antibrumm/jackson-antpathfilter
如果你直接处理视图层中的hibernate实体,你可能需要`OpenEntityManagerInViewInterceptor&#39;避免使用LazyLoadingExceptions。