Jersey kullanarak bir RESTful Web Hizmeti uyguluyorum. Veritabanıyla iletişim kurmak için hazırda bekletme (mySQL) kullanıyorum. Benim hazırda kaynak sınıfları içerir:Çok-To-One ile JAX-RS için hazırda bekleyen kaynak sınıflarında birleştirme Tablosu ile 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;
}
ve Kategori sınıfı:
@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;
}
Ben ativities getirmesi bu sorguyu kullandı:
session.createQuery("from Activity a join a.category cs where cs.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();
JSON biçiminde sonuç doğru benzemez :
[[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}},{"id":10,"name":"General","description":""}]]
Gördüğünüz gibi kategori 2 kez basıldı ve ek bir [] etrafında var. Başka benzeri Kategori sınıfında Bir-çok ilişkisi mekanizmasını kullanırken:
@OneToMany(targetEntity = Activity.class, mappedBy = "category", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JsonIgnore
private Collection<Project> activities;
Ve Etkinlik sınıfında:
@ManyToOne(optional = false)
private Category category;
Ve bu sorguyu:
session.createQuery("from Activity as a where a.category.id= :categoryId order by a.key").setLong("categoryId", categoryId).list();
Her şey çalışıyor ince. Ama ben birleştirme tablosunu kullanmam gerekiyor çünkü veritabanını değiştirmeyi düşünmüyorum. Ben herhangi bir yardım için teşekkür ederiz
[{"id":26,"key":"other","name":"Other","cost":100.0,"category":{"id":10,"name":"General","description":""}}]
: gibi
uygun sonuç bakmak gerekir.
cevap için geçin. Bahsettiğiniz çözümde aynı sorun vardı. – Ali
Düzenlenmiş cevabıma bakın –
Artık mükemmel çalışıyor. – Ali