【问题标题】:Options for storing SQL IDs in Entiies在实体中存储 SQL ID 的选项
【发布时间】:2014-03-05 12:19:11
【问题描述】:

假设 Tomcat 7、Servlets 3、MySQL 5.5 等...

在我的应用程序中,我将数据库 ID 作为 INT 存储在数据库中。在我的 DAO 中,我将它们映射到实体中的 Long。

当我编写控制器等时,我发现自己做了很多工作来测试空值和解析字符串中的值。即表单将参数作为需要解析的字符串传递。如果你解析一个 null 或空白,你会得到一个异常。检查所有这些东西的工作量很大。

既然来回传递字符串要容易得多,那么将 ID 作为字符串保留在实体中在架构上是否可以接受? SQL 可以为我进行转换ps.setObject("123"。看来我可以节省很多精力。这不像我是在对 ID 进行操作 - 除了在 SQL 中......

或者,我没有想到什么?

我正在尝试简化这一点...处理异常和清理工作同样重要。

Project project = new Project();
String param = req.getParameter("id");
if(param!=null && param.length()>0){
    Long projid = Long.parseLong(param);
    project = projectDao.getProjectById(projid);
}

【问题讨论】:

    标签: java mysql servlets dao


    【解决方案1】:

    不管是string还是long,当它为null的时候总会有问题,因为主键不能为null,对吧?另外,从数据库的角度来看,将字符串作为主键效率不高,因为比较它们并搜索字符串要糟糕得多,即使应用了索引也是如此

    【讨论】:

    • 我打算将它作为 INT 保存在数据库中。但是当 servlet 抓取 INPUT 字段时,它们是字符串。所以我会把它作为一个字符串留在实体中...... Java 除了传递它们之外什么都不做。不懒惰。只是高效...
    • 而一个空白输入将提交给一个空白字符串“”。所以只要该字段存在于表单中,就不应该为空。
    • 但最后还是要在.persist()上将实体中的字符串转换为数据库中的整数,然后空字符串仍然会导致问题
    猜你喜欢
    • 2012-12-31
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多