为什么 Hibernate Tools hbm2ddl 生成不考虑 Bean Validation 注释?

2023-11-29

摘要:我正在使用 Hibernate Tools 4.0.0-CR1 和 Hibernate 4.2(包括 Hibernate Validator),但未选择 Bean Validations。架构is部署时正确生成hibernate.hbm2ddl.auto=create-drop.

但我更喜欢通过以下 build.xml 目标生成 DDL:

<target name="schemaexport" depends="jar" description="Exports a generated schema to DB and files">
    <path id="lib.path">
        <fileset refid="lib" />
        <pathelement location="${jboss.home}/modules/org/apache/xerces/main/xercesImpl-2.9.1-jbossas-1.jar"/>
        <pathelement location="${jar.dir}" />
    </path>

    <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask"
             classpathref="lib.path"/>

    <hibernatetool destdir="${basedir}">
        <classpath refid="lib.path"/>
        <jpaconfiguration persistenceunit="TIC" propertyfile="hibernate-console.properties" />
        <hbm2ddl outputfilename="${dist.dir}/db_ddl.sql" format="true"/>
    </hibernatetool>

    <concat destfile="${dist.dir}/tic.sql" fixlastline="yes">
        <filelist dir="${dist.dir}" files="db_ddl.sql" />
        <filelist dir="${jar.dir}" files="import.sql" />
    </concat>
</target>

我的 hibernate-console.properties 如下:

hibernate.connection.password=tic
hibernate.connection.username=tic
hibernate.connection.driver_class=org.postgresql.Driver
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.url=jdbc:postgresql://127.0.0.1:5432/db

hibernate.connection.provider_class=org.hibernate.connection.DriverManagerConnectionProvider
hibernate.datasource=
hibernate.transaction.manager_lookup_class=

我仔细检查了这些 jar 是否在我的 lib.path 中...

示例实体如下所示:

@Entity
public class Title implements Serializable {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Size(max = 50) @NotEmpty @Column(length = 50)
    private String titlename;

    @Size(max = 50)
    private String shortTitle;
}

这里的问题是 hbm2ddl 为“titlename”生成正确的“varchar(50)”,但为“shortTitle”生成通用的“varchar(255)”。我在 @NotNull 和基本上所有其他 bean 验证注释上都遇到了类似的问题。根据手册这应该可行[tm]。我究竟做错了什么?


您需要区分验证 api 和 java 持久化 api (jpa)(以及供应商特定的持久化 api)。 Hibernate 考虑 JPA 配置(和 hibernate persistence api),当您不提供此类配置时Convention Over Configuration这个过程涉及到原理。这就是为什么你会得到varchar(255) for

@Size(max = 50)
private String shortTitle;

它等于(我省略了其他默认值)

@Size(max = 50)
@Column(length = 255, nullable = true)
private String shortTitle;

验证 api 涉及验证目的。检查字段是否正确填写。同一字段可以存在不同的验证规则。


Updated

我的意思是这个http://beanvalidation.org/1.0/spec/#constraintsdefinitionimplementation-constraintdefinition-groups.

对于一组,您验证一个约束,对于另一组,您验证其他约束。

例如

@NotNull(groups = DefaultGroup.class)
@Null(groups = SecondGroup.class)
private String shortTitle;

and then

    Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    Set<ConstraintViolation<Title>> constraintViolations = validator.validate(title, DefaultGroup.class);
    Set<ConstraintViolation<Title>> secondConstraintViolations = validator.validate(title, SecondGroup.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Hibernate Tools hbm2ddl 生成不考虑 Bean Validation 注释? 的相关文章

随机推荐

  • 替换空手道中的 Json 密钥 [重复]

    这个问题在这里已经有答案了 我需要将 Json 发送到端点 但需要用变量替换键 我有这个代码 def idJson response id Given path
  • 自动增量字段在另一个字段更改后重置

    您能否提供一个非常简单的 SQL 示例 说明如何创建一个自动递增的 计数 或 顺序 字段 但在不同字段的每次更改后重新启动 在下表中 每次 餐食 字段发生变化时 订单 字段都会从 1 重新开始 谢谢 用餐 时间 订单午餐 10 30 1午餐
  • 如何在 bash 中对具有特定扩展名的文件递归运行命令?

    我想从根文件夹递归运行命令 这将影响该根文件夹下具有特定扩展名的所有文件 这是命令 blender b03 blend background python myScript py 我想为每个具有 blend 扩展名的文件运行此命令 而不是
  • Ruby 中的“map”方法有什么作用?

    什么是 map do in params 0 param count map The map方法接受一个可枚举对象和一个块 并为每个元素运行块 输出块中的每个返回值 原始对象不会改变 除非您使用map 1 2 3 map n n n gt
  • CakePHP:绑定模型不起作用

    我有用户 HABTM 职业 在用户编辑中 有一个职业复选框列表 当我在用户模型中定义 HABTM 关系时 它起作用了 但由于这种关系中断了其他功能 我将其删除并将其放入用户控制器中 this gt User gt bindModel arr
  • 将复杂字典放入返回队列时,多处理进程不会加入

    给定一个非常标准的读 写多线程进程 带有读队列和写队列 8 times worker done被打印 但 join 语句从未被传递 但如果我更换queue out put r 通过 queue out put 1 它可以工作 这让我的大脑融
  • 如何从二值骨架化图像中找到分支点

    我使用 Python OpenCV 来骨架化图像 如下所示 我想找到骨架的分支点 我不知道该怎么做 有什么想法吗 这个问题已经很老了 但是如果其他人偶然发现了这个问题 并且希望得到一个不依赖其他软件包并使用简单形态操作的答案 您可能会发现以
  • postgres 空间索引

    我似乎找不到太多这方面的文档 在 postgres 上创建支持这样的查询的数据库 表的最简单方法是什么 SELECT FROM table WHERE distance POINT 0 0 table location PostgreSQL
  • 使用 python-docx 突出显示文本

    我想突出显示 docx 中的文本并将其保存到另一个文件 这是我的代码 from docx import Document def highlight text filename doc Document filename for p in
  • 如何在android列表视图上长按显示ContextMenu?

    这是联系人列表ListView 我想要当用户longClick然后在任何联系人上ContextMenu弹出窗口应该显示 呼叫 和 发送短信 我编写代码ContextMenu但仍然ContextMenu没有显示在longClick请告诉我我的
  • Elastic Beanstalk 不创建 RDS 参数

    我正在按照本教程努力在 AWS 上创建 Django 应用程序 http docs aws amazon com elasticbeanstalk latest dg create deploy Python django html 我能够
  • 如何使用 PHP Simple HTML DOM Parser 添加自定义属性

    我正在处理一个需要使用 PHP Simple HTML Dom Parser 的项目 并且我需要一种方法来根据类名向多个元素添加自定义属性 我可以使用 foreach 循环遍历元素 并且很容易设置标准属性 例如 href 但我找不到添加自定
  • 无法将“2012/11/11”强制转换为格式化日期(长)

    我是 Cassandra cql 的新手 cqlsh 4 1 1 Cassandra 2 0 8 39 CQL 规范 3 1 1 Thrift 协议 19 39 0 使用 cql COPY 命令从 CSV 格式的文件复制到表中 并收到以下错
  • 带有 /g 修饰符和 eval 的正则表达式文字 - FireFox 和 Chrome 中的奇怪行为

    我在一些 javascript 代码中遇到了一些奇怪的行为 但仅限于 Firefox 和 Chrome IE没问题 我已经隔离了问题并创建了一个小页面 以便您可以自己查看行为 本质上 看起来好像正则表达式对象MethodC即使它是局部变量
  • 使用 jQuery 使用 SOAP Web 服务

    我有一个 Java 中的 SOAP Web 服务 需要使用 jQuery 从 HTML 页面调用它 有人可以告诉我该怎么做吗 我对此很陌生 快速谷歌搜索显示有一个 jquery 插件 http plugins jquery com proj
  • vuejs将数据传递给模板html属性

    我对 Vuejs 很陌生 我了解了如何将数据 变量 传递到组件中 但在我的代码中 我需要在模板的 HTML 属性中获取这些变量 这是我的 HTML div class row text center activities div
  • 如何设置JTabbedPane选项卡高度宽度背景前景色(选定和未选定的选项卡)

    如何设置JTabbedPane选项卡背景和前景 高度和宽度 选定和未选定的选项卡 您可以为 UIDefaults 设置新值 UIDefaults def UIManager getLookAndFeelDefaults def put Ta
  • 如何/无法将乱码/奇怪的文本转换为 utf-8 android (java)?

    我的文字乱码 由从 MySql 获取的 Web 服务 php 返回 现在我试图在android中将其解码为utf 8 但它不起作用 我努力了 String s text returned by web service taking it a
  • iOS Swift 3 捆绑通知

    在我的应用程序中 我正在使用 firebase 推送通知 问题是 当用户长时间连接到互联网时 他们会收到大量通知作为单独的通知 是否可以像whatsapp一样接收通知 您有10个新通知 如果用户一次收到超过 1 个通知 则意味着我们需要将其
  • 为什么 Hibernate Tools hbm2ddl 生成不考虑 Bean Validation 注释?

    摘要 我正在使用 Hibernate Tools 4 0 0 CR1 和 Hibernate 4 2 包括 Hibernate Validator 但未选择 Bean Validations 架构is部署时正确生成hibernate hbm