gpt4 book ai didi

java - HQL从方法中获取值

转载 作者:行者123 更新时间:2023-11-30 04:48:04 29 4
gpt4 key购买 nike

我想在 HQL 中在“where”子句中使用抽象方法的结果。这可以做到吗?

类似这样的事情:

@NamedQuery(name="getMailRelations", query="Select mr from MailRelation mr where mr.getOccurrences() > 5"

我有一个像这样的映射父类(super class)

@Entity
@Table(name="Mail_Entity", schema="relations")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="relationType", discriminatorType=DiscriminatorType.STRING)
@PersistenceContext(name="domas")
public abstract class MailRelation {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.PERSIST})
@JoinColumn(name="mailId", referencedColumnName="mailId", nullable=false)
private Mail mail;

public void setMail(Mail mail) {
this.mail = mail;
if(!mail.getMailRelations().contains(this))
mail.addMailRelation(this);
}

public abstract int getOccurrences();

public Mail getMail() {
return mail;
// and more code......

最佳答案

不,那是不可能的。 HQL代码被翻译成SQL并在数据库上执行。一般来说,Java 方法无法转换为 SQL,并且数据库无法访问您的 Java 代码。

如果您遇到这样的问题,可以通过以下三种可能性来处理。这些可能性都不是完美的。

1) 使用 WHERE、GROUP BY 和 HAVING 在 HQL(或 SQL)中编写方法的逻辑。在您的示例中, getOc​​currences() 方法似乎返回多行,这也许可以通过“HAVING COUNT(...) > 5”来处理。

2) 您使用数据库存储过程。这些是p。前任。用 PL/SQL 编写的过程(对于 Oracle)。可以在 select 语句中访问它们。但是您失去了所选数据库的独立性。

3) 您加载了超出必要数量的行,并稍后在 Java 代码中进行过滤。

关于java - HQL从方法中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10499962/

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