Jpa sorgusuyla ilgili bir sorunum var. iki tabloIN ve = JPA sorgu dilindeki işleç
Şimdi birden etiketler bu etiketlerin ilişkili sonra tüm mesajlarını seçilirken olmalıdır, öyle ki bir sorgu yazmak istiyorum Orada Mesaj masa ve Etiket tablo birçok mesaj arasındaki ilişki ve Etiketi için birçok yoktur yani vardır seçilen. etiketler boks ve motivasyon sonra her üç seçilir eğer etiketleri arkadaşları ve pune sonra post1 seçilmiş ve 2 postalamak Örneğin ,
post1 has tags friends and motivation
post2 has tags motivation and pune
post3 has tag boxing
eğer etiket boks seçilirse o zaman sadece yayın 3 alınması gerekir alınması gerekir mesajlar alınmalıdır.
Ben şeylerSELECT DISTINCT p FROM Post p JOIN p.tags tags WHERE p.tags IN :tags
ama bu
SELECT DISTINCT p FROM Post p JOIN p.tags tags WHERE p.tags = :tags
gibi çalışırsanız
The state field path 'p.tags' cannot be resolved to a collection type.
sonra ince uymasını doğrulayıcı hata veriyor aşağıdaki ancak bir listesini geçtikten sonra çalıştı etiketler, hata veriyor
java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.ArrayList for parameter tags with expected type of class com.justme.model.entities.Tag from query string SELECT DISTINCT p FROM Post p JOIN p.tags tags WHERE p.tags = :tags.
Bu kadarını okuduğunuz için teşekkür ederim :) bana bu konuda yol gösterebilir misiniz?
Yukarıda belirtilen sonuçlara nasıl ulaşabilirim? benim kalıcılık sağlayıcısı
Bu EclipseLink
olan Mesaj varlık@Entity
@NamedQueries({
@NamedQuery(name = "Post.selectAllPosts", query = "SELECT p FROM Post p ORDER BY p.dateCreated DESC"),
@NamedQuery(name = "Post.selectPostForUser", query = "SELECT p FROM Post p WHERE p.user = :user ORDER BY p.dateCreated DESC"),
@NamedQuery(name = "Post.selectPostsByTags", query = "SELECT DISTINCT p FROM Post p JOIN p.tags tags WHERE p.tags IN :tags") })
public class Post implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idpost;
@Lob
private String content;
private String title;
// bi-directional many-to-one association to User
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "iduser")
private User user;
// bi-directional many-to-many association to Tag
@ManyToMany(cascade = CascadeType.PERSIST)
@JoinTable(name = "post_tag", joinColumns = @JoinColumn(name = "idpost"), inverseJoinColumns = @JoinColumn(name = "idtag"))
private List<Tag> tags = new ArrayList<Tag>();
@Temporal(TemporalType.DATE)
private Date date = null;
@Temporal(TemporalType.TIMESTAMP)
private Date dateCreated = new Date();
public Post() {
}
public int getIdpost() {
return this.idpost;
}
public void setIdpost(int idpost) {
this.idpost = idpost;
}
public String getContent() {
return this.content;
}
public void setContent(String content) {
this.content = content;
}
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
public List<Tag> getTags() {
return this.tags;
}
public void setTags(List<Tag> tags) {
this.tags = tags;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Date getDateCreated() {
return dateCreated;
}
public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
}
@Override
public String toString() {
return "Post [idpost=" + idpost + ", content=" + content + ", title="
+ title + ", date=" + date + "]";
}
}
olan bu Etiket varlık
@Entity
@NamedQueries({
@NamedQuery(name = "Tag.selectTags", query = "SELECT tag FROM Tag tag WHERE tag.tagName LIKE :keyword"),
@NamedQuery(name = "Tag.selectMatchingTags", query = "SELECT t.tagName FROM Tag t WHERE t.tagName LIKE :keyword"),
@NamedQuery(name = "Tag.selectTagByName", query = "SELECT tag FROM Tag tag WHERE tag.tagName = :tagName"),
@NamedQuery(name = "Tag.selectTagsForAllPosts", query = "SELECT DISTINCT tag FROM Tag tag, Post post JOIN tag.posts posts WHERE post.user = :user")})
public class Tag implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idtag;
private String tagName;
// bi-directional many-to-many association to Post
@ManyToMany(mappedBy = "tags", cascade = CascadeType.PERSIST)
private List<Post> posts;
public Tag() {
}
public Tag(String tagName) {
this.tagName = tagName;
}
public int getIdtag() {
return this.idtag;
}
public void setIdtag(int idtag) {
this.idtag = idtag;
}
public String getTagName() {
return this.tagName;
}
public void setTagName(String tagName) {
this.tagName = tagName;
}
public List<Post> getPosts() {
return this.posts;
}
public void setPosts(List<Post> posts) {
this.posts = posts;
}
@Override
public String toString() {
return tagName;
}
}
Posta kodunuzun kodunu postalayabilir misiniz? Görünüşe göre bu konuyla ilgili olarak – kostja
Kostja Eklenmiş varlık kodu olabilir. ve kullanıcı için tüm etiketleri alan NamedQuery Tag.selectTagForAllPosts'ın gayet iyi çalıştığını fark edebilirsiniz. Ben yazılardan etiketler almayı da düşünmeliyim, bu yüzden aynı şey üzerinde çalıştım ama işe yaramadı –
Bence bu basitleştirilmiş sürüm işe yarayabilir: '' SEÇENEKLERİNİ SEÇİN PERSONEL PERSONERLER IN: Etiketler ' – kostja