Hibernate 可以将 Null String 默认为 Empty String

发布于 2024-08-29 05:40:05 字数 264 浏览 5 评论 0原文

在我们的应用程序中,我们从 DB2 大型机数据库中提取数据。如果数据库的字段中有“低值”,hibernate 会在对象中发送“空”值。即使该列被定义为“not null”,也会发生这种情况。

当我们对此进行 XML 解析时,Castor 遇到了麻烦。我想在 Hibernate 中解决这个问题。另外,所有的 hibernate hbm 文件都已生成,因此我们不能弄乱它们(它们会不时重新生成。)

有什么方法可以拦截所有字符串并用 "" 替换 null 吗?

In our application we are pulling data from a DB2 mainframe database. If the database has "low values" in a field, hibernate sends a "null" value in the object. This occurs even if the column is defined as "not null".

As we are doing XML parsing on this, Castor is having trouble with it. I would like to fix this in Hibernate. Also, all of the hibernate hbm files are generated, so we can't mess with them (they are regened from time to time.)

Any way to intercept all Strings and replace nulls with ""?

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

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

发布评论

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

评论(4

无边思念无边月 2024-09-05 05:40:07
  • 创建一个自定义用户类型,将 null 替换为 ""
  • 将用户类型名称放在 reveng.xml 中通常放置 hibernate 类型名称的位置。
  • Create a custom user type to replace null with ""
  • Put the user type name where you normally put a hibernate type name in reveng.xml.
前事休说 2024-09-05 05:40:07

这是我们的解决方案(归功于 @Betlista@markthegrea)想出了。实际上,这是一个大写字母并被截断(许多抽象方法被删除)。

 public class UpperCaseUserType implements org.hibernate.usertype.UserType{
    private static final int[] TYPES = {Types.VARCHAR};

    public Object nullSafeGet(ResultSet resultSet, String[] strings, Object object) throws HibernateException, SQLException {
        //This might be redundant to uppercase the getter...
        return StringUtils.upperCase((String) Hibernate.STRING.nullSafeGet(resultSet, strings[0]));
    }
    public void nullSafeSet(PreparedStatement preparedStatement, Object object, int i) throws HibernateException, SQLException {
        String string = StringUtils.upperCase((String) object);
        Hibernate.STRING.nullSafeSet(preparedStatement, string, i);
    }
}

然后你这样连接它:

 <property name="partNumber" type="cat.dds.fpsdma.model.UpperCaseUserType">
        <column name="PART_NUMBER" length="20" not-null="true" />
 </property>

Here is the Solution we (credits to @Betlista and @markthegrea) came up with. Actually, this is an upper case one and is truncated (lots of abstract methods are removed).

 public class UpperCaseUserType implements org.hibernate.usertype.UserType{
    private static final int[] TYPES = {Types.VARCHAR};

    public Object nullSafeGet(ResultSet resultSet, String[] strings, Object object) throws HibernateException, SQLException {
        //This might be redundant to uppercase the getter...
        return StringUtils.upperCase((String) Hibernate.STRING.nullSafeGet(resultSet, strings[0]));
    }
    public void nullSafeSet(PreparedStatement preparedStatement, Object object, int i) throws HibernateException, SQLException {
        String string = StringUtils.upperCase((String) object);
        Hibernate.STRING.nullSafeSet(preparedStatement, string, i);
    }
}

And then you hook it up this way:

 <property name="partNumber" type="cat.dds.fpsdma.model.UpperCaseUserType">
        <column name="PART_NUMBER" length="20" not-null="true" />
 </property>
番薯 2024-09-05 05:40:07

您可以使用 hibernate 拦截器扩展 EmptyInterceptor 在实际触发该查询之前执行您想要的操作。

此处给出的示例可能会帮助您

http://www.mkyong。 com/hibernate/hibernate-interceptor-example-audit-log/

You can use hibernate interceptor which extends EmptyInterceptor to perform the operation you want to before actually firing that query.

the example given here might help you

http://www.mkyong.com/hibernate/hibernate-interceptor-example-audit-log/

莳間冲淡了誓言ζ 2024-09-05 05:40:07

我通过在连接器设置器中处理数据库 NULL 值来解决同样的问题,就像此处建议的那样,使用一个简单的方法

/**
 * Set the value related to the column: NOM
 * @param nom the NOM value
 */
public void setNom (String nom) {
    this.nom = (nom!= null) ? nom : "" ;
}

I solve same issue on my side by handling database NULL values in the connector setters, like advised here, with a simple

/**
 * Set the value related to the column: NOM
 * @param nom the NOM value
 */
public void setNom (String nom) {
    this.nom = (nom!= null) ? nom : "" ;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文