使用休眠和弹簧更新

Posted

技术标签:

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

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

我所做的是:

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

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

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

表格中的数据显示成功。

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

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

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

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

【问题讨论】:

【参考方案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 请求进行硬编码。 然后你用一些常数计算值,你不用硬编码它;)

以上是关于使用休眠和弹簧更新的主要内容,如果未能解决你的问题,请参考以下文章

使用休眠命名查询和弹簧填充 DTO 的列表属性

Spring - 使用休眠和弹簧安全扩展类

休眠弹簧连接无法自动装配

弹簧或休眠连接泄漏

休眠和弹簧持久性问题。可能的身份值没有增加?

休眠+弹簧+Tomcat