2

Hibernate、roo、および JSON を使用して OneToMany 関係を取得しようとしています。

追加することで、jspxページを介して親の子を見ることができました

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

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

ただし、GET (type=application/json) を実行するとそれらが表示されません。コードは次のとおりです。

親.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 があることがわかりますが、JSON の GET 要求の出力は次のとおりです。

 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 リクエストで自分の子供を親の下に表示するにはどうすればよいですか?

4

2 に答える 2

2

カスケード関係を返すには、エンティティの toJson() メソッドを上書きし (.aj からプッシュします)、親で次のようにします。

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

詳細については、こちらをご覧ください。@Json など、シリアライゼーションでどのメンバーを含める/除外するかを指示できるアノテーションもあると思いますが、覚えていなかったり、Google 経由で見つけたりすることはできませんでした。

于 2013-04-24T19:34:07.030 に答える