2

使用 Spring、3.2.7、Hibernate 4.2.12、Jackson 2.3.3 并使用 JsonIdentityInfo 在杰克逊中试验引用。

我有一个实体分类法,有父母和孩子,都引用了分类法本身。

@Entity
@Table(name="taxanomy")
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Taxanomy implements Serializable {
...

家长:

@ManyToOne(fetch=FetchType.EAGER)
@Cascade({org.hibernate.annotations.CascadeType.ALL})
@JoinColumn(name="parent_id", nullable=true)
public Taxanomy getParent() {

...

这些孩子:

@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
@Cascade({org.hibernate.annotations.CascadeType.ALL})
public Set<Taxanomy> getChildren() {

我使用 findAll 方法检索所有分类对象。这将返回所有对象树。根对象通过子关系包含所有其他分类对象。我想要一个列表中的所有对象,但在客户端,返回的列表包含 2 个根对象和其余数字(id)。

taxanomy = [];
function getTaxanomy() {
  $.ajax({ url: 'taxanomy/all'
     , dataType : 'json'}).done(function(data)  {
         taxanomy = data;
     });
}


>> taxanomy
>> [>Object, 1001, >Object, 1005, 1005, 1003, 1007, 1006, 1002]
              ^              ^     ^     ^     ^     ^     ^
              |______________|_____|_____|_____|_____|_____|_ want real objects?

如何在客户端强制生成所有对象而不是 ID 引用?我知道我可以迭代(或递归)树并使用 id 映射对象

4

1 回答 1

1

试试注释:

@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
class YourClassName{
   ....
}
于 2015-06-23T13:01:41.143 回答