Jerseyを使用してRESTful Webサービスを実装しています。私はデータベース(mySQL)と通信するために休止状態を使用します。私の休止状態のリソースクラスが含まれます。Jerseyを使用するJAX-RSのhibernateリソースクラスのmany-to-one
@Entity
public class Activity {
@Id
@GeneratedValue
private long id;
@ManyToOne
@JoinTable(name="category_activity",
joinColumns={@JoinColumn(name="activities_id")},
inverseJoinColumns={@JoinColumn(name="Category_id")})
private Category category;
}
とカテゴリのクラスを:
@Entity
public class Category {
@Id
@GeneratedValue
private long id;
@OneToMany
@Fetch(FetchMode.JOIN)
@JoinTable(name = "category_activity",
joinColumns = { @JoinColumn(name = "Category_id") },
inverseJoinColumns = { @JoinColumn(name = "activities_id") })
@JsonIgnore
private Collection<Activity> activities;
}
私はativitiesを取得するために、このクエリを使用:
session.createQuery("from Activity a join a.category cs where cs.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();
JSON形式の結果のような権利ではありません:
[[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}},{"id":10,"name":"General","description":""}]]
カテゴリが2回印刷されているのを見ると、その周りに余分な[]があります。 私は別のようなカテゴリーのクラスの1対多の関係のメカニズムを使用する場合:
@OneToMany(targetEntity = Activity.class, mappedBy = "category", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonIgnore
private Collection<Project> activities;
そして、Activityクラスに:
@ManyToOne(optional = false)
private Category category;
そして、このクエリ:
session.createQuery("from Activity as a where a.category.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();
すべての作品を良い。しかし、私はデータベースを変更するとは思わないので、私は結合テーブルを使用する必要があります。
適切な結果は次のようになります。私は任意の助けのために感謝
[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}}]
。
:
また、クエリが唯一のselect句を追加することにより、クエリによって接合されたすべてのエンティティの活動を選択し、そしてべきではありません応答のためにiateしてください。あなたが言った解決策にも同じ問題がありました。 – Ali
私の編集した回答を参照してください –
これは完全に機能しています。 – Ali