gpt4 book ai didi

java - Hibernate 查询多对多关系

转载 作者:行者123 更新时间:2023-12-01 11:37:29 25 4
gpt4 key购买 nike

一些免责声明:

  • 我的 Java 水平处于初级水平
  • 我是 hibernate 的初学者

好的,既然我们已经解决了这个问题,我的问题如下:

我的 EmailAddressModel 有以下到 EmailAddressTag 的映射

private String id;
@Column(unique = true)
private String emailAddressName;

@ManyToMany(fetch = FetchType.EAGER)
private Set<EmailAddressTag> emailAddressTags = new HashSet<EmailAddressTag>();

我的 EmailAddressTag 是:

private String id;    
@Column(unique = true)
private String emailAddressTags;

示例数据集:

id: 1
emailAddressName: abc@gmail.com
tags (id=1,emailAddressTags=tag1)

如何使用 HQL 构造一个查询来获取知道标签(整个对象)的电子邮件地址。类似的东西

select * from EmailAddressTable where EmailAddressTable.Tag = 'tag1'

我已经尝试过:

Set<EmailAddressTag> listOfTags = new HashSet<EmailAddressTag>();
listOfTags.add(tagToSearch);
Query query = session.createQuery("FROM EmailAddressTable item WHERE item.Tag IN (:tags)");
query.setParameterList("tags", listOfTags)

但是,如果使用setParameterList,我遇到的错误(java错误)是

Cannot cast ...EmailAddressTag to java.util.Collection

如果使用 setParameter,我遇到的错误( hibernate 错误)是

malformed numeric constant: .

任何帮助我都会非常感激。真的迷失在这里。

最佳答案

如果您实际上使用 listOfTags 变量的集合,您应该能够修复编译器错误。您没有显示这部分代码,但它可能看起来像这样:

Set<EmailAddressTag> listOfTags = new HashSet<EmailAddressTag>();
listOfTags.add(tagToSearchFor);
...
query.setParameterList("tags", listOfTags);

如果您想使用 setParameter() 代替,如果您将查询条件更改为仅检查单个标签,您应该能够修复 hibernate 错误:

Query query = session.createQuery("FROM EmailAddressTable item WHERE item.Tag = :tag");
query.setParameter("tag", tagToSearchFor)

希望这有帮助。

关于java - Hibernate 查询多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29821511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com