当前位置: 首页 > 面试题库 >

在@Column JPA注释上进行设置时,length属性有什么作用?

华升
2023-03-14
问题内容

在JPA中,设置列的长度到底有什么用?

@Column(name = "middle_name", nullable = false, length = 32)
public String getMiddleName() {
    return this.middleName;
}

我了解您可以使用注释基于实体对象生成数据库架构(DDL),但是在发生持久性时,length是否进行任何形式的检查或截断,还是仅用于架构创建?

我还意识到JPA可以放在各种实现之上,在这种情况下,我关心的实现是Hibernate。


问题答案:

持久性发生时,length是否进行任何形式的检查或截断,还是仅用于模式创建?

注释的length属性Column用于指定:

列长。(仅在使用字符串值的列时适用。)

并且仅在生成的DDL中使用。在您的示例中,结果列将作为生成,VARCHAR(32)并且尝试插入更长的字符串将导致SQL错误。

为了进行验证,您可以从Bean验证API(JSR
303
)添加一个@Size(max=32)
约束。我在此处提供了具有可运行测试的示例。

同时提供这两者Sizelength可能看起来是多余的,但是根据Bean
Validation规范的附录D,对于持久性提供程序来说,生成Bean验证感知DDL不是必需的。因此,请使用lengthDDL @Size进行验证。

如果您有兴趣,只需将Bean验证实现放在JPA 2.0的类路径上。对于JPA
1.0,请参考此先前的答案:

您需要编写一个实体侦听器,并在上触发验证@PrePersist@PreUpdate甚至@PreRemove(有有效的用例)。有关 代码示例,请参见使用JPA 1.0 进行Bean验证 。



 类似资料:
  • 问题内容: 我大致了解这种构造的作用:它创建了SomeType EJB,并将对象注入到另一个EJB中。 现在,我有一个以这样的方式开始的类:(尽管我认为只有的相关,我会给出所有类级别的注释) 什么的就做吗?他们可能会从JNDI获取或创建“ name1” …对象,但是将结果放在哪里?我看不到附近有任何电话,但是代码库很大,所以我对此不太确定。 额外的问题:我想这两个注释只是重复默认值? 更新:目前有

  • 我想根据“配置文件”设置注释的值。 让我举个例子来解释; 在上面的例子中,我们可以看到活动的“配置文件”是PROD,但是假设我们想要使用DEV配置文件,我们将不得不注释来自PROD的@Table注释,并取消注释DEV@Table注释。 如果这只针对一个实体,那不会是一个问题,但我有很多实体都有这种情况,所以我不认为这是处理这种即兴“简介”的方式。 你知道有什么办法可以解决这种情况吗?

  • 本文向大家介绍请解释下outline-offset属性有什么作用?相关面试题,主要包含被问及请解释下outline-offset属性有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 outline-offset CSS 属性用于设置 outline 与一个元素边缘或边框之间的间隙

  • 问题内容: 使用jQuery在运行时设置标签属性的最佳方法是什么? 另外,如何使用jQuery 获取标签属性的值? 问题答案: 要获取或设置HTML元素的属性,可以在jQuery中使用该函数。 要获取 href 属性,请使用以下代码: 要设置 href 属性,请使用以下代码: 在这两种情况下,请使用适当的选择器。如果已为anchor元素设置了类,请使用;如果已为anchor元素设置了id,请使用。

  • 我使用的是Spring数据Solr,我有以下Solr文档模型类,并有一个对应的SolrCrudRepository用于该类 我正在尝试在运行时修改注释“@SolrDocument(collection=“oldCollectionName”)”。 我有一个服务,它使用以下方法来查找使用存储库和模型类的所有文档 更改注释的代码如下所示 使用此方法,我正确地将newDocumentName设置到注释映