【问题标题】:JPA QueryBuilderJPA 查询生成器
【发布时间】:2011-11-18 13:41:56
【问题描述】:

请帮助创建查询! 我必须通过公共父对象按 categoryId 选择所有标签。

我有下一个:

@Table(name="ADVERT")
@Entity(name="Advert")
public class JpaAdvert implements Advert{

@Id
@GeneratedValue
private long id;

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="category_id", referencedColumnName="id")
private JpaCategory category = new JpaCategory();

@ManyToMany(fetch=FetchType.EAGER, cascade={CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name="ADVERT_TAGS", joinColumns=@JoinColumn(name="advert_id",referencedColumnName="id"), inverseJoinColumns=@JoinColumn(name="tag_id", referencedColumnName="id"))
private Set<JpaTag> tags = new HashSet<JpaTag>();

...

标签对象:

@Entity(name="Tag")
@Table(name="TAG")
public class JpaTag implements Tag {

@Id
@GeneratedValue
private long id;

private String name;

private long weight=1;

private String locale;

....

和 Category 对象:

@Table(name="CATEGORY")
@Entity(name="Category")
public class JpaCategory implements Category {

@Id
@GeneratedValue
private long id;

@Column(name="category_name")
private String categoryName;

.....

所以我需要按类别 ID 选择属于特定类别的所有标签。怎么做对我来说有点复杂!

请帮助任何人!

【问题讨论】:

    标签: java jpa query-builder


    【解决方案1】:

    您不需要为此使用标准。应该使用条件来根据可变搜索条件动态组合查询。

    这是您可以使用的 JPQL:

    select distinct tag from Advert a
    inner join a.tags tag
    where a.category.id = :categoryId
    

    如果你有双向关联,它可能会感觉更自然。然后你可以使用

    select tag from Tag tag where tag.advert.category.id = :categoryId
    

    select tag from Tag tag
    inner join tag.advert a
    where a.category.id = :categoryId
    

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 2019-02-20
      • 1970-01-01
      • 2012-07-23
      • 2019-03-28
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2011-08-31
      相关资源
      最近更新 更多