错误:org.hibernate.DuplicateMappingException: Table [] contains physical column name

不念不忘少年蓝@ 2023-06-16 08:09 116阅读 0赞

在用jpa生成代码过程中,产生以下错误:

  1. Caused by: org.hibernate.DuplicateMappingException: Table [report_nipt] contains physical column name [check_name] referred to by multiple physical column names: [checkName], [check_name]
  2. at org.hibernate.boot.internal.InFlightMetadataCollectorImpl$TableColumnNameBinding.bindPhysicalToLogical(InFlightMetadataCollectorImpl.java:922) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  3. at org.hibernate.boot.internal.InFlightMetadataCollectorImpl$TableColumnNameBinding.addBinding(InFlightMetadataCollectorImpl.java:891) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  4. at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addColumnNameBinding(InFlightMetadataCollectorImpl.java:961) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  5. at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.addColumnNameBinding(InFlightMetadataCollectorImpl.java:942) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  6. at org.hibernate.cfg.Ejb3Column.addColumnBinding(Ejb3Column.java:407) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  7. at org.hibernate.cfg.Ejb3Column.linkWithValue(Ejb3Column.java:369) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  8. at org.hibernate.cfg.annotations.SimpleValueBinder.linkWithValue(SimpleValueBinder.java:431) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  9. at org.hibernate.cfg.annotations.SimpleValueBinder.make(SimpleValueBinder.java:407) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  10. at org.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(PropertyBinder.java:187) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  11. at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:199) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  12. at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2225) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  13. at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:911) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  14. at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:738) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  15. at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:245) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  16. at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:222) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  17. at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:265) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
  18. at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
  19. at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
  20. at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE]
  21. at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE]
  22. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE]
  23. at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.12.RELEASE.jar:4.3.12.RELEASE]
  24. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
  25. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.12.RELEASE.jar:4.3.12.RELEASE]
  26. ... 16 common frames omitted

发现原来添加checkName字段,又自动产生了一个check_name的字段,非常奇怪!

仔细分析了一下,原来jpa这种方式只能用check_name这种写法,

如果写成checkName,生成了

  1. /** */
  2. private String checkName;
  3. /** 检测人 */
  4. private String checkname;

两个虽然大小写不同,但jpa认为是同一个,所以产生冲突。

解决方案:

数据表设计时,统一用小写+下划线方式来命名。

这样就可以避免该问题。

发表评论

表情:
评论列表 (有 0 条评论,116人围观)

还没有评论,来说两句吧...

相关阅读