Sto implementando un servizio Web RESTful utilizzando Jersey. Io uso la sospensione per comunicare con il database (mySQL). Le mie classi di risorse di sospensione comprende:Molti-a-uno con join Tabella in classi di risorse di sospensione per un JAX-RS utilizzando Jersey
@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;
}
e la classe Categoria:
@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;
}
Ho usato questa query per recuperare i ativities:
session.createQuery("from Activity a join a.category cs where cs.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();
Il risultato in formato JSON non è giusto come :
[[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}},{"id":10,"name":"General","description":""}]]
Come vedi la categoria viene stampata 2 volte e abbiamo un extra [] attorno ad esso. Quando uso un altro meccanismo di One-a-molti relazione in classe Categoria come:
@OneToMany(targetEntity = Activity.class, mappedBy = "category", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonIgnore
private Collection<Project> activities;
E in Classe di attività:
@ManyToOne(optional = false)
private Category category;
E questa query:
session.createQuery("from Activity as a where a.category.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();
Tutto funziona bene. Ma devo usare la tabella di join perché non suppongo di cambiare il database.
Il risultato corretto dovrebbe essere simile:
[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}}]
apprezzo per qualsiasi aiuto.
i Apprec iate per la risposta. La soluzione che hai citato ha avuto lo stesso problema. – Ali
Vedere la mia risposta modificata –
Ora funziona perfettamente. – Ali