Hibernate Невозможно найти столбец с логическим именем - PullRequest
0 голосов
/ 04 февраля 2019

Я с трудом пытаюсь найти ошибку, связанную с отображением столбцов в Hibernate.Я храню на SQL информацию о нескольких приложениях, каждое из которых может иметь или не иметь один или несколько надстроек.Связь между приложением и надстройками решается без проблем.Однако в качестве второго отношения есть надстройка с несколькими свойствами, которые они могут иметь.Я просто добавляю объекты, где я получаю сообщение об ошибке ниже

@Embeddable
public class PropertyKey implements Serializable
{
    /**
     * 
     */
    private static final long serialVersionUID = -7240987531179265668L;
    private String strObjectGUID;
    private String strValue;
}
@Entity
@Table(name = "tbl_properties")
public class PropertyEntity
{
    @EmbeddedId
    private PropertyKey objKey;
}
@Entity
@Table(name = "tbl_addins")
public class AddInEntity
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "intCode")
    private Integer intCode;
    private String strID;
    private String strApplicationID;
    private String strType;
    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name = "strObjectGUID", referencedColumnName = "strPropertyID")
    private List<PropertyEntity> colProperties;
}

Я получаю сообщение об ошибке:

[main] INFO com.mchange.v2.c3p0.C3P0Registry - Initializing c3p0-0.9.5.2 [built 08-December-2015 22:06:04 -0800; debug? true; trace: 10]
[main] INFO com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource - Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@b781de3a [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@ed59c9fa [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, contextClassLoaderSource -> caller, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, forceSynchronousCheckins -> false, identityToken -> 2ssjxha01fbizdoddf7pr|38eb2c50, idleConnectionTestPeriod -> 3000, initialPoolSize -> 5, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 300, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 1000, maxStatements -> 1000, maxStatementsPerConnection -> 0, minPoolSize -> 5, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@4c881e72 [ description -> null, driverClass -> null, factoryClassLocation -> null, forceUseNamedDriverClass -> false, identityToken -> 2ssjxha01fbizdoddf7pr|5411dd90, jdbcUrl -> jdbc:sqlserver://localhost, properties -> {databasename=Azure, integratedsecurity=true} ], preferredTestQuery -> null, privilegeSpawnedThreads -> false, propertyCycle -> 0, statementCacheNumDeferredCloseThreads -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, extensions -> {}, factoryClassLocation -> null, identityToken -> 2ssjxha01fbizdoddf7pr|23202c31, numHelperThreads -> 3 ]
Initial SessionFactory creation failed.org.hibernate.AnnotationException: Unable to map collection azure.entities.AddInEntity.colProperties
Monday, 4 Feb 2019 11:42:46 AM [main] ERROR azure.hibernate.HibernateUtil - Initial SessionFactory creation failed
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: org.hibernate.AnnotationException: Unable to map collection azure.entities.AddInEntity.colProperties
Caused by: org.hibernate.cfg.RecoverableException: Unable to find column with logical name: strPropertyID in org.hibernate.mapping.Table(tbl_addins) and its related supertables and secondary tables
Caused by: org.hibernate.MappingException: Unable to find column with logical name: strPropertyID in org.hibernate.mapping.Table(tbl_addins) and its related supertables and secondary tables

Схема SQL для этих объектов:

CREATE TABLE tbl_properties
(
    strObjectGUID nvarchar(36) NOT NULL,
    strValue nvarchar(MAX)
    CONSTRAINT pk_properties PRIMARY KEY (strObjectGUID)
)
CREATE TABLE tbl_addins
(
    intCode int NOT NULL IDENTITY(1, 1),
    strID nvarchar(36) NOT NULL,
    strApplicationID nvarchar(36) NOT NULL,
    strType nvarchar(MAX),
    strPropertyID nvarchar(36)
    CONSTRAINT pk_addins PRIMARY KEY (intCode),
    CONSTRAINT fk_addins_properties FOREIGN KEY (strPropertyID) REFERENCES tbl_properties(strObjectGUID),
    CONSTRAINT fk_addins_applications FOREIGN KEY (strApplicationID) REFERENCES tbl_applications(strObjectGUID)
)

Я попытался изменить комбинированную клавишу с помощью идентификатора на PropertyEntity, но возникает та же ошибка. У вас есть представление о том, что может произойти.Должен ли я объявить о присоединении по-другому?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Исправлено с помощью аннотации mappedBy.@OneToMany (cascade = CascadeType.ALL, mappedby = "objKey.strObjectGUID")

0 голосов
/ 04 февраля 2019

Согласно @ документации JoinColumn

имя используется для столбца текущей таблицы. ReferencedColumnName используется для установки столбца объединенной таблицы.

В вашем случае вынужно заменить конфиг на:

@JoinColumn(name = "strPropertyID", referencedColumnName = "strObjectGUID")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...