【问题标题】:JPA Problems mapping relationshipsJPA 问题映射关系
【发布时间】:2010-03-26 08:51:13
【问题描述】:

我在尝试持久化模型时遇到问题。创建EntityManagerFactory时抛出异常:

块引用 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) 在 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(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 junit.framework.TestCase.runTest(TestCase.java:168) 在 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) 在 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:列 ENTITY_TWO_ID 的 asd.entity_one 中的列类型错误。找到:double,预期: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;

...
}

谁能告诉我我的模型有什么问题? 提前致谢。

【问题讨论】:

    标签: java hibernate orm jpa


    【解决方案1】:

    嗯,消息不言自明:列类型与 Java 级别使用的类型不匹配。如果您想使用Long,请使用BIGINT 作为列类型。

    更新:我使用 Hibernate 作为 JPA 提供程序测试了您的代码,ENTITYONE.ENTITY_TWO_ID 生成为 BIGINT 列。也许您稍后生成了表并更改了 Java 类型,而没有重新生成物理模型。我的建议是放下桌子再试一次。

    【讨论】:

    • 我不明白。数据库是由提供者创建的,不是吗?我什至不知道这个“替身”是从哪里来的。
    • @Rosen 好吧,如果你告诉他这样做,它是由提供者创建的(但你没有提到你的表是在你的问题中生成的)。但我已经更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2014-01-31
    相关资源
    最近更新 更多