JPA 查询生成器

发布于 2024-12-17 02:50:07 字数 1225 浏览 4 评论 0原文

请帮助创建一个查询! 我必须通过公共父对象按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;

....

和类别对象:

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

@Id
@GeneratedValue
private long id;

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

.....

所以我需要按类别 ID 选择属于特定类别的所有标签。对于我来说,如何做到这一点有点复杂!

请任何人帮忙!

Please help to create a query!
I have to select all Tags by categoryId via common parent object.

I have next:

@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>();

...

The tag object:

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

....

and the Category object:

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

@Id
@GeneratedValue
private long id;

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

.....

So I need to select ALL tags which belong to specific category by category ID. It's a bit complicated for me how to do it!

Help please anybody!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清欢 2024-12-24 02:50:07

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

以下是您可以使用的 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

You don't need to use criteria for this. Criteria should be used to dynamically compose a query based on variable search criteria.

Here's the JPQL you could use:

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

It would probably feel more natural if you had bidirectional associations. You could then use

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

or

select tag from Tag tag
inner join tag.advert a
where a.category.id = :categoryId
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文