java - hibernate 映射异常 : Logical column name cannot be null

标签 java hibernate hibernate-mapping wildfly-10

关于以下 hibernate 映射异常的任何想法。下面是完整的堆栈跟踪,没有关于从哪个表发生此异常的信息。

org.hibernate.MappingException: Logical column name cannot be null
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:179)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:121)
        at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:193)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
        at org.jboss.threads.JBossThread.run(JBossThread.java:320)
    Caused by: org.hibernate.MappingException: Logical column name cannot be null
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getPhysicalColumnName(InFlightMetadataCollectorImpl.java:972)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getPhysicalColumnName(InFlightMetadataCollectorImpl.java:966)
        at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:681)
        at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:101)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processEndOfQueue(InFlightMetadataCollectorImpl.java:1786)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1730)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1617)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
        at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
        at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:161)
        ... 7 more

欢迎任何有关此异常根本原因的想法。

最佳答案

我看到了同样的错误,但我已经设法修复了它。我在 documentation 中偶然发现了这个:“许多 JPA 实现可能会在不为每个 @JoinColumn 注释指定 referencedColumnName 时抛出看似不一致的异常,这是 JPA 所要求的(即使所有引用的列名都等于引用表中的列名)。”为每个 JoinColumn 添加 referencedColumnNames 似乎为我解决了这个问题。

为了帮助缩小给我带来麻烦的类的范围,我在第 682 行的 org.hibernate.cfg.annotations.TableBinder::bindFk() 中设置了一个断点,他们调用了 referencedColumn = buildingContext.getMetadataCollector( ).getPhysicalColumnName(table, referencedColumn); 查找何时 referencedColumn 为空或 null。

关于java - hibernate 映射异常 : Logical column name cannot be null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40804594/

相关文章:

java - Java 中的 For-each 循环

java - 如何在 JPA 中映射没有外键的一对一关系?

java - 使用来自 AsyncTask 的响应作为回调

oracle - Grails - ORA-02275 - 这样的引用约束已经存在

java - 如何通过注解映射Map<String, String>?

Spring & Hibernate - 使 native 查询与@Transactional 在同一事务中运行

java - 每个类层次结构表上的联合

spring - 使用 isolation_serializable 使用 Spring 和 hibernate 进行事务管理

java - GWT:引用已弃用的类 SerializableException

java - 多个单词的字符串比较