`
k1280000
  • 浏览: 202645 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JPA自关联 OneToMany小issue 《已解决》

    博客分类:
  • JPA
 
阅读更多

 

PS: 答案

感谢 jinnianshilongnian同学,终于找到问题所以。

 

发现其实不是自关联的问题,所有的关系都是一样的存在这样的问题,只要注意一下就可避免。
问题出在:
Java persistence 允许两种注解方式去与数据库的table作映射: field和property .
经过测试,这两种方式是不能混着用的, 如果你选择在field上注解就不要再在getter方法上注解。
像我下面成功的代码里,注解都是在field上的,而出问题的代码是因为我的id是注解在field上而其它两个是注解在getter方法上。

总结 : 各字段的映射要么全在field上要么全在getter方法上,不能混用。

------------------------------------------------------------------------------------------------------------------------------

问题: 

 

        @Id
	@GeneratedValue
	private Integer id;
	private String name;
	@ManyToOne
	private Part bomPart;
	@OneToMany(mappedBy = "bomPart")
	private Collection<Part> parts;

 上面的代码没有问题

 而如果把注解加在getter方法上就会报错

 

       @Id
       @GeneratedValue
        private Integer id;
@OneToMany(mappedBy = "bomPart")
	public Collection<Part> getParts() {
		return parts;
	}

	public void setParts(Set<Part> parts) {
		this.parts = parts;
	}

	public Part getBomPart() {
		return bomPart;
	}
	@ManyToOne
	public void setBomPart(Part bomPart) {
		this.bomPart = bomPart;
	}
 

 

 

11:49:52,366 INFO  [org.jboss.as.osgi] (MSC service thread 1-5) JBAS011908: Unregister module: Module "deployment.EJBDBTest.jar:main" from Service Module Loader
11:49:52,379 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-7) JBAS015877: Stopped deployment EJBDBTest.jar in 15ms
11:49:52,381 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015876: Starting deployment of "EJBDBTest.jar"
11:49:52,401 INFO  [org.jboss.as.jpa] (MSC service thread 1-2) JBAS011401: Read persistence.xml for test
11:49:52,408 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-2) JNDI bindings for session bean named DB in deployment unit deployment "EJBDBTest.jar" are as follows:

	java:global/EJBDBTest/DB!com.james.dao.DBRemote
	java:app/EJBDBTest/DB!com.james.dao.DBRemote
	java:module/DB!com.james.dao.DBRemote
	java:jboss/exported/EJBDBTest/DB!com.james.dao.DBRemote
	java:global/EJBDBTest/DB
	java:app/EJBDBTest/DB
	java:module/DB

11:49:52,423 INFO  [org.jboss.as.jpa] (MSC service thread 1-2) JBAS011402: Starting Persistence Unit Service 'EJBDBTest.jar#test'
11:49:52,425 INFO  [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-2) HHH000204: Processing PersistenceUnitInfo [
	name: test
	...]
11:49:52,442 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC000001: Failed to start service jboss.persistenceunit."EJBDBTest.jar#test": org.jboss.msc.service.StartException in service jboss.persistenceunit."EJBDBTest.jar#test": Failed to start service
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA-redhat-1.jar:1.0.2.GA-redhat-1]
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [rt.jar:1.6.0_33]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.6.0_33]
	at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_33]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: test] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
	at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
	at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA-redhat-1.jar:1.0.2.GA-redhat-1]
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA-redhat-1.jar:1.0.2.GA-redhat-1]
	... 3 more
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Collection, at table: part, for columns: [org.hibernate.mapping.Column(parts)]
	at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:305)
	at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:289)
	at org.hibernate.mapping.Property.isValid(Property.java:238)
	at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:468)
	at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
	at org.hibernate.cfg.Configuration.validate(Configuration.java:1294)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1736)
	at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
	... 9 more

11:49:52,448 INFO  [org.jboss.as.osgi] (MSC service thread 1-2) JBAS011907: Register module: Module "deployment.EJBDBTest.jar:main" from Service Module Loader
11:49:52,554 INFO  [org.jboss.as.osgi] (MSC service thread 1-4) JBAS011908: Unregister module: Module "deployment.EJBDBTest.jar:main" from Service Module Loader
11:49:52,574 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-8) JBAS015877: Stopped deployment EJBDBTest.jar in 20ms
11:49:52,579 INFO  [org.jboss.as.server] (DeploymentScanner-threads - 1) JBAS015863: Replacement of deployment "EJBDBTest.jar" by deployment "EJBDBTest.jar" was rolled back with failure message {"JBAS014671: Failed services" => {"jboss.persistenceunit.\"EJBDBTest.jar#test\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"EJBDBTest.jar#test\": Failed to start service
    Caused by: javax.persistence.PersistenceException: [PersistenceUnit: test] Unable to build EntityManagerFactory
    Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Collection, at table: part, for columns: [org.hibernate.mapping.Column(parts)]"},"JBAS014771: Services with missing/unavailable dependencies" => ["jboss.deployment.unit.\"EJBDBTest.jar\".component.DB.START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.naming.context.java.comp.EJBDBTest.EJBDBTest.DB.env.\"com.james.dao.DB\".em Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"EJBDBTest.jar\".jndiDependencyService Missing[JBAS014861: <one or more transitive dependencies>]"]}
11:49:52,598 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-5) JBAS015876: Starting deployment of "EJBDBTest.jar"
11:49:52,623 INFO  [org.jboss.as.jpa] (MSC service thread 1-6) JBAS011401: Read persistence.xml for test
11:49:52,633 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-5) JNDI bindings for session bean named DB in deployment unit deployment "EJBDBTest.jar" are as follows:

	java:global/EJBDBTest/DB!com.james.dao.DBRemote
	java:app/EJBDBTest/DB!com.james.dao.DBRemote
	java:module/DB!com.james.dao.DBRemote
	java:jboss/exported/EJBDBTest/DB!com.james.dao.DBRemote
	java:global/EJBDBTest/DB
	java:app/EJBDBTest/DB
	java:module/DB

11:49:52,650 INFO  [org.jboss.as.osgi] (MSC service thread 1-1) JBAS011907: Register module: Module "deployment.EJBDBTest.jar:main" from Service Module Loader
11:49:52,650 INFO  [org.jboss.as.jpa] (MSC service thread 1-8) JBAS011402: Starting Persistence Unit Service 'EJBDBTest.jar#test'
11:49:52,651 INFO  [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-8) HHH000204: Processing PersistenceUnitInfo [
	name: test
	...]
11:49:52,663 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC000001: Failed to start service jboss.persistenceunit."EJBDBTest.jar#test": org.jboss.msc.service.StartException in service jboss.persistenceunit."EJBDBTest.jar#test": Failed to start service
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA-redhat-1.jar:1.0.2.GA-redhat-1]
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) [rt.jar:1.6.0_33]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.6.0_33]
	at java.lang.Thread.run(Unknown Source) [rt.jar:1.6.0_33]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: test] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
	at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
	at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA-redhat-1.jar:1.0.2.GA-redhat-1]
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA-redhat-1.jar:1.0.2.GA-redhat-1]
	... 3 more
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.Collection, at table: part, for columns: [org.hibernate.mapping.Column(parts)]
	at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:305)
	at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:289)
	at org.hibernate.mapping.Property.isValid(Property.java:238)
	at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:468)
	at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
	at org.hibernate.cfg.Configuration.validate(Configuration.java:1294)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1736)
	at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
	... 9 more

11:49:52,666 INFO  [org.jboss.as.controller] (DeploymentScanner-threads - 1) JBAS014774: Service status report
JBAS014777:   Services which failed to start:      service jboss.persistenceunit."EJBDBTest.jar#test": org.jboss.msc.service.StartException in service jboss.persistenceunit."EJBDBTest.jar#test": Failed to start service
 

求解释!

 

分享到:
评论

相关推荐

    JPA_OneToMany学习教程

    "JPA_OneToMany"是JPA中的一个关键概念,涉及实体之间的关联关系,特别是在处理一对多关系时。本教程将深入探讨JPA中的OneToMany映射关系,以及如何在实际开发中有效地应用。 1. **OneToMany关系**:在关系数据库中...

    JPA实体关联(hibernate实现)

    **JPA实体关联(Hibernate实现)** Java Persistence API (JPA) 是Java平台上的一个标准,用于管理和持久化Java对象到关系数据库。它提供了一种面向对象的方式来操作数据,而Hibernate是JPA的一个流行实现。在JPA中,...

    JPA课程manyToMany OneToMany 等全部测试

    在本课程中,我们将深入探讨JPA中的一些关键关系映射类型,包括`@ManyToMany`、`@OneToMany`等,以及它们的实际应用和测试。 ### `@ManyToMany`关系 在数据库设计中,`ManyToMany`关系表示两个实体之间存在多对多...

    JPA学习总结(三)--JPAOneToMany双向关联

    在本篇《JPA学习总结(三)--JPAOneToMany双向关联》中,我们将深入探讨Java Persistence API (JPA)中的OneToMany关系映射,这是一种在数据库表之间建立一对多关联的方式。JPA作为ORM(对象关系映射)框架,允许我们...

    JPA关联关系

    本文将深入探讨JPA中的四种主要关联关系:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)。 1. **一对一关联(OneToOne)** 在一对一关联中,一个实体实例对应数据库中的唯...

    使用jpa映射关联和继承

    本篇文章将深入探讨如何在JPA中映射关联和实现继承。 **一、JPA关联映射** 1. **一对一(OneToOne)映射**:一个实体对象对应数据库中的一个记录。通过`@OneToOne`注解来实现,可以是单向或双向。`@JoinColumn`...

    解决 Springboot Jpa 自动创建表 和字段乱序问题[凤凰小哥哥]

    产生原因:因为使用 jpa 自动创建表的时候,采用的是TreeMap的,我们要变成LinkedHashMap 的结构。 解决方案:在项目下java文件夹下创建包名为: org.hibernate.cfg ,创建类: PropertyContainer [包名,类名...

    JPA中,多个表相关联设定的方法。

    总结来说,JPA提供了丰富的注解,如`@OneToOne`、`@OneToMany`、`@ManyToOne`等,让我们能够轻松地处理多表关联。在实际应用中,理解并熟练运用这些注解,能够有效地管理数据库中的复杂关系,提高开发效率。同时,...

    JPA视频教程_使用jpa映射关联和继承

    在这个**“JPA视频教程_使用jpa映射关联和继承”**中,我们将深入探讨如何利用JPA来处理实体之间的关联和类的继承关系。 **1. JPA 注解** JPA 注解是实现ORM的主要手段,它们可以直接在实体类上声明,用于定义...

    jpa 关联映射jpa 关联映射jpa 关联映射

    通过以上示例,我们了解了如何在 JPA 中定义实体之间的关联关系,并且学习了如何使用 `@ManyToOne`、`@JoinColumn`、`@OneToMany` 等注解来描述实体之间的多对一和一对多关系。此外,还讨论了级联操作 (`cascade`) ...

    JPA学习笔记-EJB-04JPA关联映射总结

    2. `@OneToMany`:一对多关系,一个实体可以有多个相关联的实体。 3. `@ManyToOne`:多对一关系,多个实体对应另一个实体的单一实例。 4. `@ManyToMany`:多对多关系,多个实体可以关联多个其他实体,通常需要一个...

    jpa自动代码生成工具

    本工具可以根据数据库表自动生成JPA开发所需的实体JavaBean(带有jpa主注解)、repository及service类,提高开发效率;目前支持数据库:MYSQL;并提供配合演示使用的demo项目。

    jpa-day3-onetomany.zip

    在Spring Data JPA框架中,我们常常需要处理数据库中的复杂关系,其中一对一、一对多和多对多是最常见的实体关联关系。本教程将重点讲解如何在Spring Data JPA中实现一对多关系,以及如何进行多表联查。在这个名为...

    jpa例子jpajpa

    6. **懒加载(Lazy Loading)与即时加载(Eager Loading)**: JPA支持关联对象的懒加载和即时加载策略。懒加载意味着关联的对象只有在真正需要时才会被加载,而即时加载则会在加载主体对象时一起加载关联对象。 7. ...

    springboot jpa 自动生成实体类的 文件 Generate POJOs.groovy

    springboot jpa 自动生成实体类的 文件 可以拿走直接用 Generate POJOs.groovy

    jpa代码自动生成工具-springboot

    例如,我们可以创建一个`UserRepository`接口,继承自`JpaRepository, Long&gt;`,然后就可以直接调用其提供的方法来执行CRUD操作。 - **Service(服务层)**:服务层封装了业务逻辑,调用DAO层的方法处理数据。它通常...

    10_JPA详解_JPA中的一对多双向关联与级联操作.zip

    在JPA中,这种关联可以通过在实体类中定义`@OneToMany`注解来实现。例如,一个学生可以有多个课程,那么在`Student`和`Course`实体中,我们需要在相应的一方定义这个关联。 ```java @Entity public class Student {...

    JPA中的一对一双向关联

    在Java Persistence API (JPA) 中,一对一双向关联是一种关系映射,它允许两个实体类之间存在一对一的关系,并且每个实体都能引用对方。这种关联是双向的,意味着每个实体都可以通过自己的属性访问到另一个实体。...

    JPA-4 映射关联关系

    在Java Persistence API (JPA) 中,映射关联关系是数据模型设计的重要组成部分。JPA 提供了多种方式来处理不同类型的关联关系,包括单向多对一、单向一对多、双向一对一、双向多对一和双向多对多。下面我们将详细...

    JPA中的多对多双向关联实体定义与注解设置

    在Java Persistence API (JPA) 中,多对多(ManyToMany)关系是表示两个实体之间复杂关联的一种方式。这种关联允许一个实体实例可以与多个其他实体实例相关联,反之亦然。例如,一个学生可以选修多门课程,一门课程...

Global site tag (gtag.js) - Google Analytics