Java 如何在JPA@Entity中查找列的长度?

Java 如何在JPA@Entity中查找列的长度?,java,jpa,Java,Jpa,我已经定义了一个字符串列 @Column(length = 4000) 该属性包含日志信息,长度可以超过定义的长度。在这种情况下,可以安全地截断字段,而不会引发错误消息 我想找出pojo的DAO类中确定的列长度,以便在必要时截断字符串。我该怎么做 问候, 克里斯使用反射将是一个显而易见的答案 你在使用Hibernate吗?如果是这样,那么Hibernate验证器应该为您验证长度,并提供适当的错误消息。那么,最简单的方法就是使用注释。不过,就性能而言,我不会便宜。看看EJB对这个问题的看法 换

我已经定义了一个字符串列

@Column(length = 4000)
该属性包含日志信息,长度可以超过定义的长度。在这种情况下,可以安全地截断字段,而不会引发错误消息

我想找出pojo的DAO类中确定的列长度,以便在必要时截断字符串。我该怎么做

问候,


克里斯

使用反射将是一个显而易见的答案


你在使用Hibernate吗?如果是这样,那么Hibernate验证器应该为您验证长度,并提供适当的错误消息。

那么,最简单的方法就是使用注释。不过,就性能而言,我不会便宜。

看看EJB对这个问题的看法

换言之,如果需要person表中firstName列的长度,可以使用以下代码

person.getClass().getDeclaredField("firstName").getAnnotation(Column.class).length()

实现这一点的一种廉价而简单的方法是在实体类中使用长度常量。如果你认为列的大小在你的实体

中是一个常数,我认为这应该是正确的方法。 范例

public static final short FIELD_LENGTH = 255;
@Column(name="FIELD", length = FIELD_LENGTH)
private String field;

我正在使用Hibernate,并考虑过使用验证器,但我认为这并不合适。该列包含日志数据,可以在不引发错误的情况下安全地截断这些数据。那么反射将是最好的方法。不幸的是,没有简单的Column.getLength()方法。您将如何反映这一点?这就是现在的情况。我只是认为,作为一个合适的OR映射器,您可以轻松访问字段元数据。当注释中给出字段大小时,这将起作用。但是,有没有一种不使用注释的方法来了解底层数据库字段的实际大小?一种廉价而简单的方法是在实体类中使用长度常量
公共静态最终短字段长度=255

@列(name=“FIELD”,length=FIELD\u length)