【问题标题】:Use Hibernate to set value to uppercase使用 Hibernate 将值设置为大写
【发布时间】:2015-01-17 04:39:35
【问题描述】:

我需要将保存到数据库的值设置为大写。 我的环境是 Java,我使用 jsp/HMTL/js 作为前端表单。

我曾建议修改我的模型的 getter/setter,但我认为这可能是危险的,因为模型可能用于各种地方,并非所有地方都需要严格的大写值。

以前我曾尝试在网络表单上将值设置为大写,使用

style="text-transform:uppercase"

但是,当值保存到数据库时,它会保留小写值。

有人对此有任何注释或想法吗?

谢谢, 亲爱的

更新:

@Vimal Bera 我确实试过这个:

$('#xyz').on('input', function() {
    $('#xyz').val().toUpperCase();
});

但我承认我的 js 经验不是很好,不用说这不起作用。

【问题讨论】:

标签: java javascript html database


【解决方案1】:

您不是在谈论更改显示目的的值,因此更改前端(此处为 JS)不是正确的方法。

如果您希望该值以大写形式存储在 DB 中 - 最好在服务器上处理它(此处为 Java/Hibernate)。

我相信,完成此操作的最简单方法是在 @Entity 类的 Set 方法中将值转换为大写 - 如下所示。

public void setCatName(String catName) {
    this.catName= catName.toUpperCase();
}

如果您更改意图并将其保留仅用于显示目的 - 您也可以在后端执行此操作。

然后将 get 方法更改为返回大写值而不是 Set 方法。

但是,在前端做这样的事情是一种很好的做法——这是为了迎合不同的用例。

【讨论】:

    【解决方案2】:

    text-transform: uppercase 在 CSS 中将向客户端显示为大写的文本。从 javascript 的角度来看,文本保持为小写。我做了一个测试,可以显示在这个JSFiddle

    从输入中获取值的方式类似于

    var textinput = document.getElementById("yourinput").value;
    

    在提交到db之前,您应该确保在textinput上执行以下操作:

    var textinput = document.getElementById("yourinput").value.toUpperCase();
    

    编辑

    代替.on('input'),为<form> 绑定你的javascript,如下所示:

    <form action="" onsubmit="DoSomethingToInput();">
    
    function DoSomethingToInput() {
        document.getElementById('ppsn').value.toUpperCase();
        return true // this allows the form to submit
    }
    

    【讨论】:

    • 如果你坚持使用 JavaScript 解决方案,对表单提交事件进行大写转换是正确的方法。对每个“输入”事件执行转换效率低下,因为数据库在提交事件之后才会看到文本字段值,因此每次中间转换都是多余的。
    【解决方案3】:

    在 Java 中,在类中提供一个额外的 getter/setter,用注解映射它,例如@Column(name="DB_Column"),在 getter 中执行一些操作,例如 getProperty().toUpperCase();,然后将 other 属性(因为害怕弄乱模型而不想更改)标记为 @Transient,这样 Hibernate 就赢了不要试图坚持下去。例如,假设 catName 是您要存储在数据库中的属性:

    @Transient
    public String getCatName(){
        return catName;
    }
    
    @Column(name="CatName")
    public String getUpperCaseCatName(){
        return getCatName().toUpperCase();
    }
    

    需要客户端案例处理的解决方案是错误的选择。您不想修改状态客户端,然后在服务器端依赖它。始终在服务器端验证用户输入。

    【讨论】:

      【解决方案4】:

      当你将值存储在 DB 中时,使用 UPPER() 转换大小写。

      【讨论】:

        猜你喜欢
        • 2016-01-27
        • 2021-04-16
        • 2016-03-11
        • 2015-12-18
        • 1970-01-01
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多