JPA vs JavaBeans验证(JSR303)vs您的解决方案:在持久化之前自动截断字段

JPA vs JavaBeans验证(JSR303)vs您的解决方案:在持久化之前自动截断字段,java,database,jpa,bean-validation,Java,Database,Jpa,Bean Validation,我在数据库中有一些字段具有固定长度。我对JPA和jsr303相当陌生 JPA不允许我持久化一个字段大小大于db中允许的大小的实体(这是我想要的);并且使用长度参数描述@列s仅对ddl生成有用 另外,AFAIK使用JSR303的@Size描述参数,仅当我希望修改字段时才会触发回答 我想知道,使用JSR303、JPA或其他方法处理这种截断的标准方法是什么 编辑:可以在JPA中启用一些自动截断吗 最好的问候就像JB Nizet建议的那样,这可以用setter来完成。但这并不能使它成为一个严格的Java

我在数据库中有一些字段具有固定长度。我对
JPA
jsr303
相当陌生

JPA不允许我持久化一个字段大小大于db中允许的大小的实体(这是我想要的);并且使用
长度
参数描述
@列
s仅对ddl生成有用

另外,AFAIK使用JSR303的
@Size
描述参数,仅当我希望修改字段时才会触发回答

我想知道,使用JSR303、JPA或其他方法处理这种截断的标准方法是什么

编辑:可以在JPA中启用一些自动截断吗


最好的问候

就像JB Nizet建议的那样,这可以用setter来完成。但这并不能使它成为一个严格的Javabean

您也可以在数据库中实现它,但这会降低您的实现的可移植性

最好的方法是将此逻辑保持在bean或DB之外。即,在应用程序逻辑中

更新:

如果需要在JPA中执行截断,请查看@EntityListeners和回调。

根据您使用的数据库,您可能只需要让它自动截断长字段。实体中字段的设置程序只需截断值即可。谢谢您的回答。数据库是Oracle10g,但我不想用DB的方式来实现。而且我的DBA脾气暴躁。坦率地说,自动截断数据不是我愿意做的事情,当然也不是“自动”或“默认”。如果我想在数据库中存储某个不合适的内容,我更喜欢通过异常得到警告,而不是让它被截断(即不正确)并盲目保存,而不事先通知。那以后事情会变得更糟。如何处理无效的输入数据并不是真正需要在ORM层处理的问题。是的,我同意。我应该把它放在某种数据格式化类中。然而,我希望避免将实体字段的描述放得太远。你知道做这件事的好方法吗?