Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Hibernate联接继承查询结果的类型错误_Spring_Hibernate_Inheritance - Fatal编程技术网

Spring Hibernate联接继承查询结果的类型错误

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"

我不熟悉春天/冬眠。我已经编写了一个Web服务,它应该返回完整的对象,有时还返回减少的对象。例如,我有一个从
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);