【问题标题】:Clean data before inserting to table在插入表之前清理数据
【发布时间】:2017-03-23 02:21:40
【问题描述】:

我的 JPA 实体如下所示。

Employee{

String name;

String address;

String phoneNumber;

Date  joiningDate;

boolean isActive;

}

我看到我们在地址表中插入了错误数据,名称如坏字符 \u000b 这是换行符。我想一般处理这个以在插入之前清理数据。 我想在 dao 层处理,因为这会从很多地方调用,因此想在一个中心位置处理。像 AOP 这样的东西 我在做

employeeDao.save(employee);

然后employee.merge();

【问题讨论】:

  • 谢谢,但用户可能会从 REST API 输入错误的值,也有许多入口点,所以我觉得最好在后端进行清理
  • 您想删除所有现有记录并每次都插入新鲜吗?或者您只想删除您提到的特定不良记录?或者正在寻找不会插入坏字符的东西?
  • 我不想删除我只是想在插入表格之前去掉这个字符。有什么 aop 建议我可以在通用中做到这一点

标签: java spring hibernate jpa


【解决方案1】:

您可以向您的实体添加一个带有@PrePersist 或@PreUpdate 注释的方法来清理您的数据。该方法会在每次插入或更新前自动调用。

import javax.persistence.Entity;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;

@Entity
public class MyEntity{

   @PrePersist
   @PreUpdate
   private void cleanup() {
       ...correct your data here...
   }
}

【讨论】:

    【解决方案2】:

    这不是 dao/domain 层验证数据的责任,而是表示和/或业务层的责任。因此,检查客户端或业务层控制器之一的数据,然后使用经过验证的数据调用域层(或抛出 EInvalidXXXX 异常)

    【讨论】:

      【解决方案3】:

      您无需在代码中处理此逻辑,hibernate 可以为您完成。在hibernate.cfg.xml 中将hbm2ddl.auto 属性设置为create,hibernate 会在每次运行应用程序时删除现有表并创建一个新表。如果您不想再创建新表,请将属性设置为update,hibernate 会在表上追加数据。

      <property name="hbm2ddl.auto">create</property>
      

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 2014-01-15
        • 2013-06-16
        • 2012-06-02
        • 2010-11-19
        • 2011-10-30
        • 1970-01-01
        • 2016-04-23
        • 2020-06-13
        相关资源
        最近更新 更多