当前位置: 首页 > 知识库问答 >
问题:

Hibernate条件-从两个表中获取结果而不存在任何关联

庞元青
2023-03-14

我一直在努力使用Hibernate标准实现搜索功能。要求有点模糊。用户可以在搜索字段中输入任何文本/单词,搜索必须通过多个相互之间没有任何关联的表进行。

下面是两个实体类。

Table A (EntityClassA.java)
Table B (EntityClassB.java)

如果用户输入“anycharecter”,则应在这两个表中搜索该表,并应返回与输入字符匹配的获取列表。我还想将表A的结果存储到列表中,将表B的结果存储到列表中。

我不确定使用hibernate标准如何实现这一点。

我只能为一张桌子写这个。

public List<EntityClassAVo> search((string keywords){

List<EntityClassAVo> outputList = new ArrayList<EntityClassVo>();

Criteria criteria = etSessionFactory().getCurrentSession().createCriteria(EntityClassA.class);
//applying restriction - as I need to search entered string in all columns. 
criteria.add(Restrictions.ilike("id", keywords, MatchMode.ANYWHERE));
criteria.add(Restrictions.ilike("name", keywords, MatchMode.ANYWHERE));
criteria.add(Restrictions.ilike("age", keywords, MatchMode.ANYWHERE));
outputList = criteria.list();
return outputList;
}

问题

1)如果可能,如何编写EntityClassB. java标准在相同的搜索方法?

2)如果问题1是可能的,如何在一个对象中存储从EntityClassA获取的结果,在另一个对象中存储从EntityClassB获取的结果?

3) 如果以上这些都不简单,我可能会要求更改设计(只有在我有充分理由的情况下)我正在考虑在(表a)和(表B)之间放置一个中间表(表X)。

【已编辑】4)有一个场景,用户希望从一个表或两个表中搜索结果。我们如何检查这种情况?

请帮我破解这个东西。

共有1个答案

罗绪
2023-03-14

为什么不能为EntityClassB编写相同的标准?

Criteria criteriaA = etSessionFactory().getCurrentSession().
            createCriteria(EntityClassA.class);
criteriaA.add(Restrictions.ilike("id", keywords, MatchMode.ANYWHERE));
criteriaA.add(Restrictions.ilike("name", keywords, MatchMode.ANYWHERE));
criteriaA.add(Restrictions.ilike("age", keywords, MatchMode.ANYWHERE));

Criteria criteriaB = etSessionFactory().getCurrentSession().
            createCriteria(EntityClassB.class);
criteriaB.add(Restrictions.ilike("smth", keywords, MatchMode.ANYWHERE));
criteriaB.add(Restrictions.ilike("rows", keywords, MatchMode.ANYWHERE));
criteriaB.add(Restrictions.ilike("here", keywords, MatchMode.ANYWHERE));

然后使用,例如,Map:Entity-

map.put(EntityClassA.class, criteriaA.list());
map.put(EntityClassB.class, criteriaB.list());
return map;
 类似资料:
  • 我正在使用hibernate 4和Spring 3。 我有5个表,每个表映射一个实体类。现在,如果我必须从1个表中选择列,我将执行以下操作: 此结果中的此值将为EmployeeEntity类型。 或者我也可以使用标准。 现在我的要求是我必须从所有5个表中得到结果。每个表中有1-2列。 早些时候,它是一个1表,所以我得到了一个实体,现在我得到了5个表的结果,所以如何在实体中映射它。 List res

  • 问题内容: 我有dbo.Users表 然后我有dbo.Phones表 然后我有dbo.Relationship表 我如何进行查询返回 这就是我到目前为止所得到的。 问题答案: 在这里,将“关系”表视为“用户”和“电话”表之间的中间人。它与映射表是多对多关系。将您的用户加入到关系中,然后将其加入到您的电话中。 可以这样想: 用户: 您好关系,我的UserId = 1,我对那个UserId有什么电话I

  • 我有两个实体与单向@OneTo多项映射: 我想获得所有B实体的列表,它们是匹配限制的A实体的子实体。 这就是我卡住的地方:c.list()将返回给我一个对象列表。我不关心A,我想要B。我如何使用Hibernate标准/预测来完成它?如果有关系,我使用Hibernate 4.2.12 在这种简化的情况下,只是急切地去拿是有意义的;在真实的例子中,有一个由四个一对一的单向关联组成的链,我想让所有(或者

  • 我得到异常后,我适当的结果criteria.unique结果()对象报价。目的查询-从数据库Oracle的表“报价”中获得随机结果 org.hibernate.exception.SQLGrammarExc0019:无法提取org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelega

  • 问题内容: 如果我的查询包含一个类,例如: 然后我迭代它,那里是一个类的对象。 那么如何从包含多个类的查询中获取结果呢?例如: 问题答案: for (Object[] result : query.list()) { User user = (User) result[0]; Group group = (Group) result[1]; }

  • 问题内容: 有什么办法可以使两个表之间没有直接关系但又在hibernate中有两个公共字段呢? 我有两个表,称为boiler_plates和profile,它们之间没有直接关系,但是有一个名为contract_id的公共字段。 我写了查询“来自bp.bt_contracts = p.contract_id上的Boiler_Plates bp内部连接配置文件p”,但它不断抛出错误。“意外令牌:在第1