如何在查询后设置@Transient字段值?使用Hibernate Criteria进行查询

时间:2016-03-14 10:17:34

标签: hibernate criteria default-constructor

让我详细描述这个问题以避免X-Y情况。

我想使用Hibernate执行LIKE查询来检索表Product中的注册表,其中Product的{​​{1}}将我的输入字符串作为全名。 SQL中的东西如:

User

我对Hibernate Criteria感到满意,但在这种情况下似乎没有办法在Criteria中组合列值搜索(我不想生成一些自定义Criteria),所以我试图使用{{ 1}},但我发现在某些情况下SELECT * FROM product WHERE id_user IN (SELECT id_user FROM users WHERE CONCAT(first_name, ' ', last_name) LIKE ?)非常容易,而Restriction.sqlRestriction()是不可能的,例如:

createAlia()

所以,我正在考虑另一种解决方案:在sqlRestriction中创建一个criteria.createAlias("user.supervisor.teamleader", "uT"); 字段来存储全名,连接@TransientUserfirst_name ,因为现在数据库中不存在名为" "的列,我不想触及表结构,这需要修改生产数据库。

如果我在last_name类的默认构造函数中声明full_name字段,当我从数据库中检索某个full_name实体时,此字段将按照我的预期保存User,或者是User

1 个答案:

答案 0 :(得分:0)

  

如果我在User类的默认构造函数中声明了full_name字段,当我从数据库中检索一些User实体时,该字段是否会保留first_name +“”+ last_name,或者它是否为null?

它将保存字符串"null null",因为在字段填充之前会调用默认构造函数。

实体是一个简单的Java类。因此,如果您执行new Persist()Class<Persist>.newInstance(),则始终会首先调用默认构造函数。第二种方式是Hibernate如何创建持久化类的对象。

由于

,这种方法无法解决您的任务
CONCAT(first_name, ' ', last_name) LIKE ?

不一样

first_name LIKE ? or last_name LIKE ?
  

我不想生成一些自定义标准

我会建议你这样做。

之前我曾写过这样的限制

How can I concatenate two properties into one property using hibernate criteria query

您也可以尝试使用@Formula,如上面的链接所述。