【问题标题】:Updating using hibernate and spring使用休眠和弹簧更新
【发布时间】:2016-07-09 00:40:08
【问题描述】:

我在数据库中有表怀疑,使用休眠逆向工程我创建了一个 bean。我需要制作一个表格来更新这个嫌疑人。

我所做的是:

我。获取可疑行(基于使用休眠的 id)

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

三。将其作为弹簧形式的命令对象传递。

表格中的数据显示成功。

表中有一些字段是我通过一些逻辑硬编码设置的。这些字段在表单标签中不存在。所以当我保存(在休眠中使用更新功能)这个表单时。它将这些列的值设置为空。

现在我觉得可能有两种解决方案:

  1. 在更新表单中为所有此类字段创建隐藏字段或
  2. 在更新时再次对其进行硬编码。

哪个更好,还有其他方法吗?

【问题讨论】:

    标签: java mysql spring forms hibernate


    【解决方案1】:

    还有其他方法吗?

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

    如果你不想要数据库默认值,而只是一个默认值 在你的 Java 代码中,像这样初始化你的变量

    会清理代码,让逻辑更清晰:

    private Integer myColumn = 100;
    

    不管怎样,回答你的问题:)

    哪个更好?

    取决于应用需求。

    • 在更新表单中为所有此类字段创建隐藏字段

    如果获取此字段的逻辑计算成本较高,您可以使用隐藏字段来节省此计算成本,但这似乎不是您的问题,只要您对这些数据进行编码即可。

    • 在更新时再次对其进行硬编码。

    硬编码永远不是学术编程之外的选择,但如果更新的字段可以使这个固定值被改变,你最好的选择是在之前再次生成这个字段更新。

    更新:

    我还想避免硬编码值。与隐藏字段安全是唯一的问题。虽然在我目前的情况下,安全性不是一个大问题,但我可以遵循第二种选择。

    那么是的,第二个选项对你更好。


    澄清一下,即这将是硬编码:

    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;
    

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


    更新:安全

    但我很想知道如果我必须保持这些值的安全

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

    【讨论】:

    • 很高兴为您提供帮助,如果您需要澄清或更多信息,请随时询问
    • 感谢回复,但值不固定,我不能使用默认值。我也想避免硬编码值。有了隐藏的领域,安全是唯一的问题。虽然在我目前的情况下,安全性不是一个大问题,我可以遵循第二种选择。但我很想知道如果我必须保证这些值的安全。
    • 关于安全有很多方法,简单的一种?将不可更新的值保留在服务器端即可完成工作,如果客户端需要它们,您可以双重验证它们(javascript/hibernate)并(如有必要)加密以隐藏内容
    • 我可以根据不在数据库中的 url 请求进行硬编码。
    • 然后你用一些常数计算值,你不用硬编码它;)
    猜你喜欢
    • 2011-08-09
    • 2016-11-04
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多