如何使用jpa项目eclipse在实体类中生成唯一约束

Posted

技术标签:

【中文标题】如何使用jpa项目eclipse在实体类中生成唯一约束【英文标题】:how to generate unique constraint in entity class using jpa project eclipse 【发布时间】:2018-03-03 13:27:14 【问题描述】:

我打算在我的项目中集成 ORM,所以我使用 eclipse 的 JPA 项目从旧数据库中生成实体类。总共生成了 168 个实体类,这很好。但在nullableunique 等一些约束条件下不会自动生成。

例如我需要这样的东西:-

@Column(name="USER_NAME",unique = true)
private String userName;

但是在自动生成实体之后,代码中没有唯一约束。我怎样才能简单地做到这一点?

任何建议都会很有用。

【问题讨论】:

如果您无法使用 Eclipse 的 JPA 项目来完成这项工作,您可能会考虑尝试使用 Hibernate / JBoss Tools 的逆向工程师。网上有几篇文章将带您逐步了解如何执行此操作,例如mkyong.com/hibernate/how-to-generate-code-with-hibernate-tools @Column 注释的unique 属性仅用于 DDL 生成,即在您从映射的 JPA 实体生成数据库模式的情况下。它对代码完全没有影响。当您走相反的方向时,拥有它就没有什么意义了:***.com/questions/30460596/… 【参考方案1】:

在 Eclipse 中检查您的 JPA 版本,如果您发现最低版本,请将其更新为最新版本。最新的 JPA 创建了我们在数据库表中定义的所有约束。 希望这对你有帮助。

【讨论】:

【参考方案2】:

@Unique 表示唯一索引,可防止索引字段中出现重复值。 如果不同实体在唯一字段中具有相同的值(类似于主键的行为方式),则在提交(或刷新)时引发 PersistenceException。 在你的例子中:

@Unique
@Column(name="USER_NAME")
private String userName;

【讨论】:

这不回答问题。【参考方案3】:

只有在创建表时才会创建唯一约束。如果表已经存在,则在 DDL 更新期间将仅添加新列。因此,您必须手动删除表或将javax.persistence.schema-generation.database.action 的值设置为drop-and-create

【讨论】:

这也不回答问题。【参考方案4】:

你必须使用 Jboss 的 Hibernate Tools,它可以让你做更好的逆向工程。

http://hibernate.org/tools/

外面有一堆教程在解释如何使用休眠工具。

【讨论】:

以上是关于如何使用jpa项目eclipse在实体类中生成唯一约束的主要内容,如果未能解决你的问题,请参考以下文章

springboot jpa oracle实体类中配置注解无法在数据库中生成注释的一种解决方式

在eclipse中生成实体类

Spring Data JPA中使用QueryDSL进行查询

理解如何创建实体管理器或者我是不是可以在 JAVA EE 中生成它们的问题 [重复]

无法在 IntelliJ IDEA 中生成 JPA Hibernate 元模型类

用Eclipse生成JPA元模型