2010-03-26 213 views
1

我嘗試堅持模型時出現問題。創建的EntityManagerFactory時,則拋出異常:JPA問題映射關係

塊引用 javax.persistence.PersistenceException:[PersistenceUnit:ASD]無法在org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory構建的EntityManagerFactory (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(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(來源不明) 在sun.reflect.DelegatingMethodAccessorImpl。 invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at junit.framework.TestCase.runTest(TestCase.java:168) at junit.framework.TestCase.runBare(TestCase.java: 134) at junit.framework.TestResult.run(TestResult.java:113)在junit.framework.TestResult.runProtected(TestResult.java:128) 處的$ 1.protect(TestResult.java:110) )在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在運行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:列名爲ENTITY_TWO_ID的asd.entity_one中的列類型錯誤。發現: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

我不明白。數據庫由提供者創建,不是嗎?我甚至不知道這個「雙」來自哪裏。 – 2010-03-26 09:00:42

+0

@羅森如果你告訴他這樣做(但你沒有提到你的表格是在你的問題中產生的),它是由提供者創建的。但我已經更新了我的答案。 – 2010-03-26 16:15:57