Hibernate 标准返回多个类

发布于 2024-12-12 07:59:50 字数 754 浏览 0 评论 0原文

我是 Hibernate 标准的新手,在简单的获取类方面遇到了问题。 假设我们有类:

    Class A{
    int id;
    List<A> aList;
    }

和:

  Class B{
    A a;
    (...)

}

和:

Class C{
int id;
String name;
B b;
}

我想得到 List< C>如果“名字”像“abc”。这是我的标准代码:

    Session session = hibernateTemplate.getSessionFactory().getCurrentSession();
    Criteria crit = session.createCriteria(C.class);
    crit.add(Restrictions.like("nazwa", "%"+string+"%").ignoreCase());
    return crit.list();

我遇到了例外:

org.postgresql.util.PSQLException:错误:运算符不存在: 字符变化=整数

在由条件生成的 SQL 查询中,我可以在 C 类中包含的 A 类和 B 类上看到“左外连接”。可能这就是我无法加载的原因

I am newbie to Hibernate criteria and I got problem with simple obtain class.
Assume we have classes:

    Class A{
    int id;
    List<A> aList;
    }

and:

  Class B{
    A a;
    (...)

}

and :

Class C{
int id;
String name;
B b;
}

I want to get List< C > if 'name' like 'abc'. Here is my criteria code:

    Session session = hibernateTemplate.getSessionFactory().getCurrentSession();
    Criteria crit = session.createCriteria(C.class);
    crit.add(Restrictions.like("nazwa", "%"+string+"%").ignoreCase());
    return crit.list();

I got exception:

org.postgresql.util.PSQLException: ERROR: operator does not exist:
character varying = integer

In my SQL query generated by criteria I can see "left outer join" on my A and B classes that are contained in my C class. Probably that's why I cannot load

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

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

发布评论

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

评论(1

极致的悲 2024-12-19 07:59:50

如果关联是 @OneToOne@ManyToOne,则会存在左外连接,因为默认情况下它们在 ToOne 拥有方中是渴望的。

如果您想使用这样的 LIKE 子句,请使用 MatchMode.ANYWHEREilike 相反:

add(Restrictions.ilike("nazwa", string, MatchMode.ANYWHERE))

另外,请确保您要在类中查询的属性C 名为 nazwa(在代码示例中输入为 name),并且它有一个适当的 getter/setter。

There will be left outer joins if the associations are @OneToOne or @ManyToOne, just because they are eager in the ToOne owning side by default.

If you want to use such a LIKE clause, use MatchMode.ANYWHERE and ilike instead:

add(Restrictions.ilike("nazwa", string, MatchMode.ANYWHERE))

Also, make sure the property you want to query in class C is named nazwa (it is typed as name in the code example), and it has a proper getter/setter.

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