Spring Hibernate联接继承查询结果的类型错误
我不熟悉春天/冬眠。我已经编写了一个Web服务,它应该返回完整的对象,有时还返回减少的对象。例如,我有一个从Spring Hibernate联接继承查询结果的类型错误,spring,hibernate,inheritance,Spring,Hibernate,Inheritance,我不熟悉春天/冬眠。我已经编写了一个Web服务,它应该返回完整的对象,有时还返回减少的对象。例如,我有一个从MemberBase类继承的Member类: ... ** * MemberBase */ @Entity @Table(name = "MemberBase") @Inheritance(strategy = InheritanceType.JOINED) @SequenceGenerator(name = "idgen", sequenceName = "seq_Member"
MemberBase
类继承的Member
类:
...
**
* MemberBase
*/
@Entity
@Table(name = "MemberBase")
@Inheritance(strategy = InheritanceType.JOINED)
@SequenceGenerator(name = "idgen", sequenceName = "seq_Member")
public class MemberBase extends BasePojo {
@Column(name = "alias")
private String alias = null;
@Column(name = "firstName")
private String firstName = null;
@Column(name = "gender")
@Enumerated(EnumType.STRING)
private Gender gender = null;
@Transient
@OneToMany(fetch = FetchType.LAZY, mappedBy = "creator")
@ElementCollection(targetClass=OutingBase.class)
private Set<OutingBase> outings = null;
...
}
在我的控制器中,我使用hibernate获取成员库列表:
public ResponseEntity<List<MemberBase>> membersGet() {
Session session = HibernateUtils.getSessionFactory().openSession();
session.beginTransaction();
List<MemberBase> personList = session.createQuery("FROM " + MemberBase.class.getName(), MemberBase.class)
.getResultList();
session.close();
return new ResponseEntity<List<MemberBase>>(personList, HttpStatus.OK);
}
我的问题是,当我调用
membersGet()
时,我检索的是列表
,而不是列表
。没有崩溃,但我的序列化Json包含太多字段。我实现这个继承是为了避免获取所有成员的字段。我做错了什么?
我建议使用FasterXML Jackson提供的JsonIgnore
anotion
正如名称所示,解析对象时,anotation将导致忽略该属性
e。g
@JsonIgnore
private String locationName = null;
编辑:
使用JsonView
指定应为哪个视图显示/分析属性。
Eg
映射时,可以指定所需的视图
ObjectMapper mapper = new ObjectMapper();
String result = mapper
.writerWithView(JsonView.Extended.class)
.writeValueAsString(member);
请参见此处:好,但在某些情况下,我需要获得完整的
成员
,因此这不是解决方案:)感谢您的编辑,现在我了解了JsonView并阅读了您提供的链接中的文档。我没有使用映射器,而是在我的spring接口上使用如下注释:`@JsonView(JsonView.Extended.class)@RequestMapping(“/items/internal/{id}”)公共项getItemInternal(@PathVariable int id){return itemmager.getById(id);}`很高兴我能帮助您。
@JsonIgnore
private String locationName = null;
public class JsonView {
public static class Base {
}
public static class Extended extends Base {
}
}
@JsonView(JsonView.Extended.class)
private String locationName = null;
@JsonView(JsonView.Base.class)
private String alias = null;
ObjectMapper mapper = new ObjectMapper();
String result = mapper
.writerWithView(JsonView.Extended.class)
.writeValueAsString(member);