JPA Проблемы отображения отношений - PullRequest
1 голос
/ 26 марта 2010

У меня проблема при попытке сохранить мою модель. При создании EntityManagerFactory выдается исключение:

Blockquote javax.persistence.PersistenceException: [PersistenceUnit: ASD] Невозможно построить EntityManagerFactory в org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory (Ejb3Configuration.java:677) в org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory (HibernatePersistence.java:126) в javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:52) в javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:34) at project.serealization.util.PersistentManager.createSession (PersistentManager.java:24) в project.serealization.SerializationTest.testProject (SerializationTest.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) в java.lang.reflect.Method.invoke (Неизвестный источник) at junit.framework.TestCase.runTest (TestCase.java:168) at junit.framework.TestCase.runBare (TestCase.java:134) на junit.framework.TestResult $ 1.protect (TestResult.java:110) в junit.framework.TestResult.runProtected (TestResult.java:128) на junit.framework.TestResult.run (TestResult.java:113) at junit.framework.TestCase.run (TestCase.java:124) на junit.framework.TestSuite.runTest (TestSuite.java:232) на junit.framework.TestSuite.run (TestSuite.java:227) в org.junit.internal.runners.JUnit38ClassRunner.run (JUnit38ClassRunner.java:79) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:46) в org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:38) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:197) Причина: org.hibernate.HibernateException: неверный тип столбца в asd.entity_one для столбца ENTITY_TWO_ID. Найдено: двойной, ожидаемый: bigint в org.hibernate.mapping.Table.validateColumns (Table.java:284) в org.hibernate.cfg.Configuration.validateSchema (Configuration.java:1116) в org.hibernate.tool.hbm2ddl.SchemaValidator.validate (SchemaValidator.java:139) в org.hibernate.impl.SessionFactoryImpl. (SessionFactoryImpl.java:349) в org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1327) в org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory (AnnotationConfiguration.java:867) в org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory (Ejb3Configuration.java:669) ... еще 24

Код для двух сущностей следующий:

@Entity
public class EntityOne 
{
@OneToOne(cascade = CascadeType.ALL, targetEntity = EntityTwo.class)
@JoinColumn(name = "ENTITY_TWO_ID")
private EntityTwo entityTwo;

... 
}


@Entity
public class EntityTwo
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ELEMENT_ID")
private Long element_id;

...
}

Может кто-нибудь сказать, что не так с моей моделью? Заранее спасибо.

1 Ответ

2 голосов
/ 26 марта 2010

Ну, сообщение самоочевидно: тип столбца не соответствует типу, используемому на уровне Java. Если вы хотите получить Long, используйте BIGINT в качестве типа столбца.

Обновление: Я проверил ваш код в Hibernate в качестве поставщика JPA, и ENTITYONE.ENTITY_TWO_ID сгенерировано как столбец BIGINT. Возможно, вы сгенерировали свою таблицу и позже изменили тип Java, не восстанавливая физическую модель. Мое предложение было бы бросить стол и попробовать еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...