-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Splitting Hibernate Entity among 2 Tables
PostPosted: Wed May 06, 2009 9:07 pm 
Newbie

Joined: Tue Jul 22, 2008 5:11 pm
Posts: 16
I have a simple Class Hierarchy that I am trying to get to work with Hibernate/JPA.

Basically what I want is for the MovementData to be in its own Table with a FK to the integer id of the Main Vehicle Table in the Database.

Am I doing something wrong? How else can I accomplish something similar?
I am pretty sure I am following the JPA spec. (EJB3 In Action says this should work: EJB3 In Action: @SecondaryTable http://books.google.com/books?id=j4Qf2iLL488C&pg=PA266&vq=%40secondarytable&dq=ejb3%2Bin%2Baction&source=gbs%5Fsearch%5Fs&cad=0)

Here is a portion of the exception I am getting:

Code:
    SEVERE: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
    org.hibernate.AssertionFailure: Table MOVEMENT_DATA not found
       at org.hibernate.persister.entity.JoinedSubclassEntityPersister.getTableId(JoinedSubclassEntityPersister.java:480)
       at org.hibernate.persister.entity.JoinedSubclassEntityPersister.<init>(JoinedSubclassEntityPersister.java:259)
       at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:87)
       at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:261)
       at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327)



Here is some of the logging info from Hibernate that pertains to the Vehicle... It looks like it is recognizing everything fine.. Then it throws the exception for some reason.

Code:
    INFO: Binding entity from annotated class: com.dataobject.Vehicle
    FINE: Import with entity name Vehicle
    INFO: Bind entity com.dataobject.Vehicle on table VEHICLE
    INFO: Adding secondary table to entity com.dataobject.Vehicle -> MOVEMENT_DATA
    FINE: Processing com.dataobject.Vehicle property annotation
    FINE: Processing annotations of com.dataobject.Vehicle.id
    FINE: Binding column id. Unique false. Nullable false.
    FINE: id is an id
    FINE: building SimpleValue for id
    FINE: Building property id
    FINEST: Cascading id with null
    FINE: Bind @Id on id
    FINE: Processing annotations of com.dataobject.Vehicle.color
    FINE: Binding column COLOR. Unique false. Nullable true.
    FINE: binding property color with lazy=false
    FINE: building SimpleValue for color
    FINE: Building property color
    FINEST: Cascading color with null
    FINE: Processing annotations of com.dataobject.Vehicle.movementData
    FINE: Binding column movementData. Unique false. Nullable true.
    FINE: Binding component with path: com.dataobject.Vehicle.movementData
    FINE: Processing com.dataobject.MovementData property annotation
    FINE: Processing annotations of com.dataobject.MovementData.latitude
    FINE: Column(s) overridden for property latitude
    FINE: Binding column LATITUDE. Unique false. Nullable true.
    FINE: binding property latitude with lazy=false
    FINE: building SimpleValue for latitude
    FINE: Building property latitude
    FINEST: Cascading latitude with null
    FINE: Processing annotations of com.dataobject.MovementData.longitude
    FINE: Column(s) overridden for property longitude
    FINE: Binding column LONGITUDE. Unique false. Nullable true.
    FINE: binding property longitude with lazy=false
    FINE: building SimpleValue for longitude
    FINE: Building property longitude
    FINEST: Cascading longitude with null
    FINE: Processing annotations of com.dataobject.MovementData.speed
    FINE: Column(s) overridden for property speed
    FINE: Binding column SPEED. Unique false. Nullable true.
    FINE: binding property speed with lazy=false
    FINE: building SimpleValue for speed
    FINE: Building property speed
    FINEST: Cascading speed with null
    FINE: Processing annotations of com.dataobject.MovementData.timeOfPosition
    FINE: Column(s) overridden for property timeOfPosition
    FINE: Binding column TIME_OF_POSITION. Unique false. Nullable true.
    FINE: binding property timeOfPosition with lazy=false
    FINE: building SimpleValue for timeOfPosition
    FINE: Building property timeOfPosition
    FINEST: Cascading timeOfPosition with null
    FINE: Building property movementData
    FINEST: Cascading movementData with null
    FINE: Processing annotations of com.dataobject.Vehicle.numWheels
    FINE: Binding column NUM_WHEELS. Unique false. Nullable true.
    FINE: binding property numWheels with lazy=false
    FINE: building SimpleValue for numWheels
    FINE: Building property numWheels
    FINEST: Cascading numWheels with null
    INFO: Binding entity from annotated class: com.dataobject.Car
    FINE: Binding column id. Unique false. Nullable false.
    FINE: Subclass joined column(s) created
    FINE: Import with entity name Car
    INFO: Bind entity com.dataobject.Car on table CAR
    FINE: Processing com.dataobject.Car property annotation
    FINE: Processing annotations of com.dataobject.Car.make
    FINE: Binding column MAKE. Unique false. Nullable true.
    FINE: binding property make with lazy=false
    FINE: building SimpleValue for make
    FINE: Building property make



Vehicle is the Parent Class

Code:
    /**
     * Entity implementation class for Entity: Vehicle
     *
     */
    @Entity
    @Table(name="VEHICLE")
    @Inheritance(strategy=InheritanceType.JOINED)
    @SecondaryTable(name="MOVEMENT_DATA",
                pkJoinColumns = {
                    @PrimaryKeyJoinColumn(name = "ID")
                }
    )
    public class Vehicle implements Serializable {
   
       
       private int numWheels;
       private String color;
       private int id;
       private MovementData movementData;
       private static final long serialVersionUID = 1L;
   
       
       public Vehicle() {
          super();
       }   
       
       @Embedded
        @AttributeOverrides( {
        @AttributeOverride(
            name = "speed",
            column = @Column(name = "SPEED",
                             table = "MOVEMENT_DATA")
        ),
        @AttributeOverride(
            name = "timeOfPosition",
            column = @Column(name = "TIME_OF_POSITION",
                             table = "MOVEMENT_DATA")
        ),
        @AttributeOverride(
                name = "longitude",
                column = @Column(name = "LONGITUDE",
                                 table = "MOVEMENT_DATA")
            ),
       @AttributeOverride(
                name = "latitude",
                column = @Column(name = "LATITUDE",
                                 table = "MOVEMENT_DATA")
            )
    })
       public MovementData getMovementData() {
          return movementData;
       }
       public void setMovementData(MovementData movementData) {
          this.movementData = movementData;
       }
       
       @Column(name="NUM_WHEELS")
       public int getNumWheels() {
          return this.numWheels;
       }
   
       public void setNumWheels(int numWheels) {
          this.numWheels = numWheels;
       }   
       @Column(name="COLOR")
       public String getColor() {
          return this.color;
       }
   
       public void setColor(String color) {
          this.color = color;
       }   
       @Id   
       public int getId() {
          return this.id;
       }
   
       public void setId(int id) {
          this.id = id;
       }
       
    }


Car extends Vehicle


Code:
    /**
     * Entity implementation class for Entity: Car
     */
    @Entity
    @Table(name="CAR")
    public class Car extends Vehicle implements Serializable {
   
       
       private String make;
       private static final long serialVersionUID = 1L;
   
       public Car() {
          super();
       }   
       /**
        * @return
        */
       @Column(name="MAKE")
       public String getMake() {
          return this.make;
       }
   
       /**
        * @param make
        */
       public void setMake(String make) {
          this.make = make;
       }
       
    }


MovementData is Embedded in Vehicle


Code:
    @Embeddable
    public class MovementData implements Serializable {
   
   
       private double speed;
       private Date timeOfPosition;
       private double latitude;
       private double longitude;
       private static final long serialVersionUID = 1L;
   
       public MovementData() {
          super();
       }   
       
       
       
       /**
        * @return
        */
       @Column(name="SPEED")
       public double getSpeed() {
          return this.speed;
       }
   
       /**
        * @param speed
        */
       public void setSpeed(double speed) {
          this.speed = speed;
       }   
       /**
        * @return
        */
       @Column(name="TIME_OF_POSITION")
       public Date getTimeOfPosition() {
          return this.timeOfPosition;
       }
   
       /**
        * @param timeOfPosition
        */
       public void setTimeOfPosition(Date timeOfPosition) {
          this.timeOfPosition = timeOfPosition;
       }   
       
       /**
        * @return
        */
       @Column(name="LONGITUDE")
       public double getLongitude() {
          return this.longitude;
       }
   
       /**
        * @param longitude
        */
       public void setLongitude(double longitude) {
          this.longitude = longitude;
       }
       /**
        * @return
        */
       @Column(name="LATITUDE")
       public double getLatitude() {
          return this.latitude;
       }
   
       /**
        * @param latitude
        */
       public void setLatitude(double latitude) {
          this.latitude = latitude;
       }   
       
    }


Persistence Unit:

Code:
      <properties>
         <!-- The database dialect to use -->
         <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
         <!-- drop and create tables at deployment -->
         <property name="hibernate.hbm2ddl.auto" value="create-drop" />
         <property name ="hibernate.show_sql" value="false" />
         <property name ="hibernate.format_sql" value="false" />
         <property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletonEhCacheProvider" />
      </properties>


Top
 Profile  
 
 Post subject: Re: Splitting Hibernate Entity among 2 Tables
PostPosted: Wed May 13, 2009 12:57 pm 
Newbie

Joined: Tue Jul 22, 2008 5:11 pm
Posts: 16
Can anyone help?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.