2013-04-24 62 views
1

我想要使用Hibernate,roo和JSON获取OneToMany关系。Spring Roo OneToMany关系不显示在JSON中

我能够加入

<field:display field="children" id="s_com_example_domain_Parent_children" object="${parent}" z="Etv5+hIcaVaq9A6jzjMOK0xoJMI="/> 

到/src/main/webapp/WEB-INF/parents/show.jspx

但是看到通过JSPX页父的孩子,我看不到他们,当我执行GET(类型=应用程序/ JSON) 这里是我的代码:

Parent.java:

@RooJavaBean 
@RooToString 
@RooJpaActiveRecord 
@RooJson 
public class Parent { 

private String name; 

@OneToMany(cascade = CascadeType.ALL, mappedBy = "parent") 
private Set<Child> children = new HashSet<Child>(); 
} 

Child.java

@RooJavaBean 
@RooToString 
@RooJpaActiveRecord 
@RooJson 
public class Child { 

private String name; 

@ManyToOne 
private Parent parent; 
} 

小豆壳:

jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY 
entity jpa --class ~.domain.Parent 
entity jpa --class ~.domain.Child 
field set --fieldName children --type ~.domain.Child --class ~.domain.Parent --mappedBy  parent --cardinality ONE_TO_MANY --notNull false 
field reference --fieldName parent --type ~.domain.Parent --cardinality MANY_TO_ONE --class ~.domain.Child --notNull false 
web mvc setup 
web mvc all --package ~.web 
web mvc json all 

我还添加

 <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.12</version> 
    </dependency> 

要我Maven项目。

如果我通过web(jspx)接口,我可以添加父p和子c。我可以看到孩子有父母P,和父母有孩子C,但这里是我的GET请求的输出为JSON

Request Url: http://localhost:8080/HibernateTest/children/1 
Request Method: GET 
{ 
    "id": 1, 
    "name": "c", 
    "parent": { 
     "id": 1, 
     "name": "p", 
     "version": 0 
    }, 
    "version": 0 
} 

Request Url: http://localhost:8080/HibernateTest/parents/1 
Request Method: GET 
{ 
    "id": 1, 
    "name": "p", 
    "version": 0 
} 

我怎样才能让我的孩子们的家长下现身一个JSON GET请求?

回答

2

为了回报级联关系,您是否覆盖你的实体的toJSON()方法(从.aj将其推入),在你的父母做这样的事情:

public String toJson() { 
    return new JSONSerializer().include("*.children").serialize(this); 
} 

更多信息,可以发现here。我认为还有一个注释可以使用,比如@Json或者类似的东西,在这个注释中你可以指示哪些成员要在序列化中包含/排除,但是我不记得它,也没有通过Google找到它。

+0

这工作,谢谢! – 2013-04-24 21:12:20

0

使用deepSerialize在RooJson注释进去Flexjson更深,而不必惹方面:

@RooJavaBean 
@RooJpaActiveRecord 
@RooJson(deepSerialize = true) 
public class Office { 

    @NotNull 
    private String name; 

    @OneToMany(targetEntity = Person.class, cascade = CascadeType.ALL, mappedBy = "office") 
    private Set<Person> people = new HashSet<Person>(); 

    @NotNull 
    @ManyToOne(targetEntity = Company.class) 
    private Company company; 
}