相关疑难解决方法(0)

如何在表单,验证和ddl中重用字段长度?

我正在开发一个包含大量输入表单的Spring应用程序.我想在UI表单,验证和JPA注释中重用字段长度.有没有一种优雅的方法来解决这个问题.我的解决方案是,使用常量来声明长度:

public class Person
{
   public static final int FIRSTNAME_LENGTH = 25;

   @Column(length=FIRSTNAME_LENGTH)
   private String firstName;

   ...
}
Run Code Online (Sandbox Code Playgroud)

然后在Validator和Jsp中重用常量

...

<form:input path="firstName" 
    maxlength="<%= Integer.toString(Person.FIRSTNAME_LENGTH) %>"/>

...
Run Code Online (Sandbox Code Playgroud)

这很啰嗦.

这个问题还有更优雅的解决方案吗?

java annotations jpa spring-mvc

6
推荐指数
1
解决办法
3043
查看次数

自动修剪提交给MySQL的字符串长度

当我向mySQL数据库提交表单字段时,有没有办法设置数据库自动丢弃超过数据字段长度的任何数据?

我知道我可以以编程方式执行此操作,但数据库是否可以设置为丢弃多余的而不会抛出错误?

为清晰起见编辑

继承我的插入声明

<cfquery datasource='#arguments.dsn#' name="addPatient">        
                INSERT INTO patients(patientFirstname
                                ,patientLastname
                                ,nhsNumber
                                ,patientDOB
                                ,patientTitle
                                ,address1
                                ,address2
                                ,address3
                                ,address4
                                ,postcode
                                ,patientPhone1
                                )
                VALUES (<cfqueryparam value="#arguments.patientFirstname#" cfsqltype="CF_SQL_LONGVARCHAR"/>
                        ,<cfqueryparam value="#arguments.patientLastname#" cfsqltype="CF_SQL_LONGVARCHAR"/>
                        ,<cfqueryparam value="#arguments.nhsNumber#" cfsqltype="CF_SQL_LONGVARCHAR"/>
                        ,<cfqueryparam value="#arguments.patientDOB#" cfsqltype="CF_SQL_TIMESTAMP"/>
                        ,<cfqueryparam value="#arguments.patientTitle#" cfsqltype="CF_SQL_LONGVARCHAR"/>
                        ,<cfqueryparam value="#arguments.address1#" cfsqltype="CF_SQL_VARCHAR"/>
                        ,<cfqueryparam value="#arguments.address2#" cfsqltype="CF_SQL_LONGVARCHAR"/>
                        ,<cfqueryparam value="#arguments.address3#" cfsqltype="CF_SQL_LONGVARCHAR"/>
                        ,<cfqueryparam value="#arguments.address4#" cfsqltype="CF_SQL_LONGVARCHAR"/>
                        ,<cfqueryparam value="#arguments.postcode#" cfsqltype="CF_SQL_LONGVARCHAR"/>
                        ,<cfqueryparam value="#arguments.patientPhone1#" cfsqltype="CF_SQL_VARCHAR"/>
                        )
            </cfquery>
Run Code Online (Sandbox Code Playgroud)

表字段patientPhone是VARCHAR(20)

如果我没有progamatically验证提交,只是在一个30个字符长的表单值爆炸我错了(当我认为它会做的只是存储前20个字符)

Data truncation: Data too long for column 'patientPhone1' at row 8
Run Code Online (Sandbox Code Playgroud)

当我使用向导设置数据库时,我记得选择innodb和事务性以及传统仿真(如果我没记错的话,建议使用)

mysql

6
推荐指数
3
解决办法
2万
查看次数

如何找出JPA @Entity中列的长度?

我已经定义了一个String列

@Column(length = 4000)
Run Code Online (Sandbox Code Playgroud)

该属性包含日志信息,可能长于定义的长度.在这种情况下,可以安全地截断字段而不抛出错误消息.

我想在poo的DAO类中找出确定的列长度,以便在必要时可以截断字符串.我怎样才能做到这一点?

问候,

克里斯

java jpa

5
推荐指数
1
解决办法
7588
查看次数

标签 统计

java ×2

jpa ×2

annotations ×1

mysql ×1

spring-mvc ×1