Many-To-One mit Join-Tabelle in Ruhezustands-Ressourcenklassen für eine JAX-RS mit Jersey

Ich implementiere einen RESTful Web Service mit Jersey. Ich benutze den Ruhezustand, um mit der Datenbank (mySQL) zu kommunizieren. Zu meinen Ruhezustand-Ressourcenklassen gehören:

@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;
}

und die Kategorie Klasse:

@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;
}

Ich habe diese Abfrage verwendet, um die Aktivitäten abzurufen:

session.createQuery("from Activity a join a.category cs where cs.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();

Das Ergebnis im JSON-Format sieht nicht so aus:

[[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}},{"id":10,"name":"General","description":""}]]

Wie Sie sehen, wird die Kategorie zweimal gedruckt, und wir haben ein zusätzliches [] um sie herum. Wenn ich einen anderen Mechanismus der Eins-zu-Viele-Beziehung in der Kategorie-Klasse verwende, wie:

@OneToMany(targetEntity = Activity.class, mappedBy = "category", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonIgnore
private Collection<Project> activities;

Und in der Aktivitätsklasse:

@ManyToOne(optional = false)
    private Category category;

Und diese Abfrage:

session.createQuery("from Activity as a where a.category.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();

Alles funktioniert gut. Aber ich muss Join-Tabelle verwenden, weil ich nicht annehme, die Datenbank zu ändern.

Das richtige Ergebnis sollte folgendermaßen aussehen:

[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}}]

Ich freue mich über jede Hilfe.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage