java - Hibernate: OneToMany relationship WITHOUTH cyclic dependency -


i have onetomany data model 2 entities. 1 machine contains many characteristics.

problem: trying create entities without cyclic dependency.

but issue:

  exception sending context initialized event listener instance of class org.springframework.web.context.contextloaderlistener org.springframework.beans.factory.beancreationexception: error creating bean name 'entitymanagerfactory' defined in servletcontext resource [/web-inf/spring-config.xml]: invocation of init method failed; nested exception javax.persistence.persistenceexception: [persistenceunit: default] unable build hibernate sessionfactory     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1574)     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:539)     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.createbean(abstractautowirecapablebeanfactory.java:476)     @ org.springframework.beans.factory.support.abstractbeanfactory$1.getobject(abstractbeanfactory.java:303)     @ org.springframework.beans.factory.support.defaultsingletonbeanregistry.getsingleton(defaultsingletonbeanregistry.java:230)     @ org.springframework.beans.factory.support.abstractbeanfactory.dogetbean(abstractbeanfactory.java:299)     @ org.springframework.beans.factory.support.abstractbeanfactory.getbean(abstractbeanfactory.java:194)     @ org.springframework.context.support.abstractapplicationcontext.getbean(abstractapplicationcontext.java:956)     @ org.springframework.context.support.abstractapplicationcontext.finishbeanfactoryinitialization(abstractapplicationcontext.java:747)     @ org.springframework.context.support.abstractapplicationcontext.refresh(abstractapplicationcontext.java:480)     @ org.springframework.web.context.contextloader.configureandrefreshwebapplicationcontext(contextloader.java:403)     @ org.springframework.web.context.contextloader.initwebapplicationcontext(contextloader.java:306)     @ org.springframework.web.context.contextloaderlistener.contextinitialized(contextloaderlistener.java:106)     @ org.apache.catalina.core.standardcontext.listenerstart(standardcontext.java:4842)     @ org.apache.catalina.core.standardcontext.startinternal(standardcontext.java:5303)     @ org.apache.catalina.util.lifecyclebase.start(lifecyclebase.java:147)     @ org.apache.catalina.core.containerbase$startchild.call(containerbase.java:1407)     @ org.apache.catalina.core.containerbase$startchild.call(containerbase.java:1397)     @ java.util.concurrent.futuretask.run(unknown source)     @ java.util.concurrent.threadpoolexecutor.runworker(unknown source)     @ java.util.concurrent.threadpoolexecutor$worker.run(unknown source)     @ java.lang.thread.run(unknown source) caused by: javax.persistence.persistenceexception: [persistenceunit: default] unable build hibernate sessionfactory     @ org.hibernate.jpa.boot.internal.entitymanagerfactorybuilderimpl.persistenceexception(entitymanagerfactorybuilderimpl.java:1225)     @ org.hibernate.jpa.boot.internal.entitymanagerfactorybuilderimpl.access$600(entitymanagerfactorybuilderimpl.java:119)     @ org.hibernate.jpa.boot.internal.entitymanagerfactorybuilderimpl$4.perform(entitymanagerfactorybuilderimpl.java:853)     @ org.hibernate.jpa.boot.internal.entitymanagerfactorybuilderimpl$4.perform(entitymanagerfactorybuilderimpl.java:843)     @ org.hibernate.boot.registry.classloading.internal.classloaderserviceimpl.withtccl(classloaderserviceimpl.java:398)     @ org.hibernate.jpa.boot.internal.entitymanagerfactorybuilderimpl.build(entitymanagerfactorybuilderimpl.java:842)     @ org.springframework.orm.jpa.vendor.springhibernatejpapersistenceprovider.createcontainerentitymanagerfactory(springhibernatejpapersistenceprovider.java:60)     @ org.springframework.orm.jpa.localcontainerentitymanagerfactorybean.createnativeentitymanagerfactory(localcontainerentitymanagerfactorybean.java:343)     @ org.springframework.orm.jpa.abstractentitymanagerfactorybean.afterpropertiesset(abstractentitymanagerfactorybean.java:318)     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.invokeinitmethods(abstractautowirecapablebeanfactory.java:1633)     @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.initializebean(abstractautowirecapablebeanfactory.java:1570)     ... 21 more caused by: org.hibernate.mappingexception: not determine type for: java.util.set, @ table: machine, columns: [org.hibernate.mapping.column(characteristics)]     @ org.hibernate.mapping.simplevalue.gettype(simplevalue.java:336)     @ org.hibernate.mapping.simplevalue.isvalid(simplevalue.java:310)     @ org.hibernate.mapping.property.isvalid(property.java:241)     @ org.hibernate.mapping.persistentclass.validate(persistentclass.java:496)     @ org.hibernate.mapping.rootclass.validate(rootclass.java:270)     @ org.hibernate.cfg.configuration.validate(configuration.java:1358)     @ org.hibernate.cfg.configuration.buildsessionfactory(configuration.java:1849)     @ org.hibernate.jpa.boot.internal.entitymanagerfactorybuilderimpl$4.perform(entitymanagerfactorybuilderimpl.java:850)     ... 29 more 

my database:

machine:

enter image description here

create statement:

create table `machine` (   `id` int(11) not null auto_increment,   `name` varchar(45) not null,   `description` varchar(45) not null,   primary key (`id`) ) engine=innodb auto_increment=31 default charset=utf8 

entity:

@entity @table(name = "machine") public class machine {     private int machine_id;       private string name;      private string description;       private set<characteristic> characteristics;      public set<characteristic> getcharacteristics() {         return characteristics;      }      public void setcharacteristics(set<characteristic> characteristics){         this.characteristics = characteristics;     }      public machine(){}      public machine(string name, string description){         this.name = name;         this.description = description;      }      @id      @generatedvalue(strategy = generationtype.auto)     @column(name="id")     public int getid() {         return machine_id;     }      public void setid(int machine_id) {         this.machine_id = machine_id;     }      @column(name="name")     public string getname() {         return name;     }      public void setname(string name) {         this.name = name;     }      @column(name="description")     public string getdescription() {         return description;     }      public void setdescription(string description) {         this.description = description;     } } 

characteristic

enter image description here

create statement:

create table `characteristic` (   `characteristic_id` int(11) not null auto_increment,   `machine_id` int(11) not null default '0',   `name` varchar(45) default null,   `description` varchar(45) default null,   `type` int(11) not null,   `value` int(11) default null,   primary key (`characteristic_id`), ) engine=innodb auto_increment=26 default charset=latin1 

entity:

@entity @table(name = "characteristic") public class characteristic {     private int characteristic_id;       private string name;       private string description;       private int type;       private int value;      public characteristic() {}      public characteristic(string description, int type, int value) {         this.description = description;         this.type = type;         this.value = value;     }       public characteristic(int characteristic_id, string description, int type, int value) {         this.characteristic_id = characteristic_id;         this.description = description;         this.type = type;         this.value = value;     }       @id     @generatedvalue(strategy = generationtype.auto)     @column(name="characteristic_id")     public int getcharacteristic_id() {         return characteristic_id;     }      public void setcharacteristic_id(int characteristic_id) {         this.characteristic_id = characteristic_id;     }      @column(name="name")     public string getname() {         return name;     }      public void setname(string name) {         this.name = name;     }      @column(name="description")     public string getdescription() {         return description;     }      public void setdescription(string description) {         this.description = description;     }      @column(name="type")     public int gettype() {         return type;     }      public void settype(int type) {         this.type = type;     }      @column(name="value")     public int getvalue() {         return value;     }      public void setvalue(int value) {         this.value = value;     } } 

spring-config.xml

<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"      xmlns:jpa="http://www.springframework.org/schema/data/jpa"     xmlns:context="http://www.springframework.org/schema/context"     xsi:schemalocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans.xsd     http://www.springframework.org/schema/data/jpa     http://www.springframework.org/schema/data/jpa/spring-jpa.xsd     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">  <context:component-scan base-package="com.mego.smscloud" />      <bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource">         <property name="driverclassname" value="com.mysql.jdbc.driver"/>         <property name="url" value="jdbc:mysql://localhost:3306/maschinedb?servertimezone=utc"/>         <property name="username" value="root"/>         <property name="password" value=""/>     </bean>      <bean id="jpavendoradapter" class="org.springframework.orm.jpa.vendor.hibernatejpavendoradapter">         <property name="showsql" value="true"/>         <property name="generateddl" value="true"/>         <property name="database" value="mysql"/>     </bean>      <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localcontainerentitymanagerfactorybean">         <property name="datasource" ref="datasource"/>         <property name="jpavendoradapter" ref="jpavendoradapter"/>         <property name="packagestoscan" value="com.mego.smscloud.entity"/>     </bean>      <bean id="transactionmanager" class="org.springframework.orm.jpa.jpatransactionmanager"/>      <jpa:repositories base-package="com.mego.smscloud.repository" />  </beans> 

it's problem mapping between characteristic , machine. log tells hibernate doesn't know type use mapping. should add @onetomany annotation on method getcharacteristics() in class machine.

you have here collection mapping @ section onetomany unidirectional (with or without jointable): https://docs.jboss.org/hibernate/annotations/3.4/reference/en/html_single/#entity-mapping-association-collections

@entity @table(name = "machine") public class machine {     private int machine_id;       private string name;      private string description;       private set<characteristic> characteristics;      @onetomany     @joincolumn(name="machine_id")     public set<characteristic> getcharacteristics() {         return characteristics;      }      public void setcharacteristics(set<characteristic> characteristics){         this.characteristics = characteristics;     }      public machine(){}      public machine(string name, string description){         this.name = name;         this.description = description;      }      @id     @generatedvalue(strategy = generationtype.auto)     @column(name="id")     public int getid() {         return machine_id;     }      public void setid(int machine_id) {         this.machine_id = machine_id;     }      @column(name="name")     public string getname() {         return name;     }      public void setname(string name) {         this.name = name;     }      @column(name="description")     public string getdescription() {         return description;     }      public void setdescription(string description) {         this.description = description;     } } 

hope help


Comments

Popular posts from this blog

sql - invalid in the select list because it is not contained in either an aggregate function -

Angularjs unit testing - ng-disabled not working when adding text to textarea -

How to start daemon on android by adb -