有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用hibernate和spring更新java

我在数据库中有一个可疑的表,我使用hibernate反向工程创建了一个bean。我需要做一个表格来更新这个嫌疑犯

我所做的是:

i.获取的可疑行(基于使用hibernate的id)

二,。在可疑的命名对象中设置

iii.将其作为spring窗体命令对象传递

它成功地将表中的数据显示在表单中

表中有一些字段是我通过一些逻辑硬编码设置的。表单标记中不存在这些字段。所以当我保存(使用hibernate中的更新函数)这个表单时。它将这些列的值设置为null

到目前为止,我感觉可能有两种解决方案:

  1. 在更新表单中为所有此类字段或
  2. 在更新时重新硬编码

哪一种更好?如果有其他方法可以做到这一点


共 (1) 个答案

  1. # 1 楼答案

    is any other way to do it?

    更适合您的方式是在数据库或hibernate like in this question中使用默认值:

    If you don't want database default value, but simply a default value in your Java code, just initialize your variable like that

    将清理代码并使逻辑更清晰:

    private Integer myColumn = 100;
    

    不管怎样,让我们来回答你的问题:)

    Which is better?

    取决于应用程序的需求

    • create hidden fields in the update form for all such fields

    如果获取这些字段的逻辑具有较高的计算成本,则可以使用隐藏字段来节省计算成本,但只要对这些数据进行了加密,这似乎不是您的问题

    • hard code them again at the time of updating.

    硬编码从来都不是学术编程之外的选项,但如果更新的字段可以使其固定值,则最好的选择是在更新之前再次生成此字段

    更新:

    I also want to avoid hard coded values. with hidden fields safety is only concern. Though in my current case security is not a big issue and i can follow second option.

    那么是的,第二种选择对你更有利


    为了澄清,也就是说,这将是硬编码:

    int prize = 100;
    

    但是如果你在表格中要求奖励,你有一个恒定的字段,比如:

    // CONSTANT
    private final Integer VAT = 18;
    
    // ATTRIBUTE (filled by user in form)
    int prize;
    

    更新实体时,可以每次重新计算,例如,税收奖励(未测试,请小心floating point error dividing

    // calculated field / attribute
    double finalPrize = prize * VAT / 100;
    

    这是在使用常量,而不是硬编码,常量是我们的朋友;)


    更新:安全性

    but I am curious to know what if i have to keep these values safe

    关于安全有很多方法,简单一点?在服务器端保留不可更新的值可以完成这项工作,如果客户端需要,可以对它们进行双重验证(javascript/hibernate),还可以(如果需要)加密以隐藏内容