【发布时间】:2014-10-02 23:07:53
【问题描述】:
使用 Spring Data REST 时出现标题中的错误。如何解决?
派对.java:
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, property="@class")
@JsonSubTypes({ @JsonSubTypes.Type(value=Individual.class, name="Individual") })
public abstract class Party {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
protected Long id;
protected String name;
@Override
public String toString() {
return id + " " + name;
}
...getters, setters...
}
个人.java:
@Entity
public class Individual extends Party {
private String gender;
@Override
public String toString() {
return gender + " " + super.toString();
}
...getters, setters...
}
PartyRepository.java:
public interface PartyRepository extends JpaRepository<Party,Long> {
}
如果我发布,它会正确保存到数据库:
POST /parties {"@class":"com.example.Individual", "name":"Neil", "gender":"MALE"}
但返回 400 错误:
{"cause":null,"message":"Cannot create self link for class com.example.Individual! No persistent entity found!"}
从存储库检索后看起来像是个人:
System.out.println(partyRepository.findOne(1L));
//output is MALE 1 Neil
看起来杰克逊可以确定这是一个人:
System.out.println( new ObjectMapper().writeValueAsString( partyRepository.findOne(1L) ) );
//output is {"@class":"com.example.Individual", "id":1, "name":"Neil", "gender":"MALE"}
为什么 SDR 想不通?
如何解决?最好使用 XML 配置。
版本:
SDR 2.2.0.RELEASE
SD JPA 1.7.0.RELEASE
Hibernate 4.3.6.Final
【问题讨论】:
标签: spring-data spring-data-jpa spring-data-rest