如何使用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 个实体类,这很好。但在nullable
、unique
等一些约束条件下不会自动生成。
例如我需要这样的东西:-
@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实体类中配置注解无法在数据库中生成注释的一种解决方式
Spring Data JPA中使用QueryDSL进行查询
理解如何创建实体管理器或者我是不是可以在 JAVA EE 中生成它们的问题 [重复]