2010-03-26 4 views
1

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

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) в sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) в sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) в sun.reflect.DelegatingMethodAccessorImpl. invoke (Неизвестный источник) at java.lang.reflect.Method.invoke (Неизвестный источник) at junit.framework.TestCase.runTest (TestCase.java:168) at junit.framework.TestCase.runBare (TestCase.java: 134) at junit.framework.TestResult $ 1.protect (TestResult.java:110) at junit.framework.TestResult.runProtected (TestResult.java:128) at junit.framework.TestResult.run (TestResult.java:113) на junit.framework.TestCase .run (TestCase.java:124) at junit.framework.TestSuite.runTest (TestSuite.java:232) at junit.framework.TestSuite.run (TestSuite.java:227) at org.junit.internal.runners .JUnit38ClassRunner.run (JUnit38ClassRunner.java:79) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:46) at org.eclipse.jdt.internal.junit.runner.TestExecution .run (TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit. runner.RemoteTestRunner.main (RemoteTestRunner.java:197) Вызвано: org.hibernate.HibernateException: Неверный тип столбца в asd.entity_one для столбца ENTITY_TWO_ID. Найдено: double, expected: bigint at org.hibernate.mapping.Table.validateColumns (Table.java:284) at org.hibernate.cfg.Configuration.validateSchema (Configuration.java:1116) at 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; 

... 
} 

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

ответ

2

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

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

+0

Я не понимаю. База данных создается провайдером, не так ли? Я даже не знаю, откуда пришел этот «двойник». –

+0

@Rosen Ну, он создан провайдером, если вы ему скажете (но вы не упомянули, что ваш стол был создан в вашем вопросе). Но я обновил свой ответ. –

Смежные вопросы