Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.databases > #375

hibernate mapping problem

From "Mark Sudau" <mark.sudau@THRWHITE.remove-dii-this>
Subject hibernate mapping problem
Message-ID <49365f1d$0$30225$9b4e6d93@newsspool1.arcor-online.net> (permalink)
Newsgroups comp.lang.java.databases
Date 2011-04-27 15:23 +0000
Organization TDS.net

Show all headers | View raw


  To: comp.lang.java.databases
Hi folks,

I have a problem using Hibernate Annotations. I try to map the following 
entity relation_

ER-Diagram:

+------+ 1           * +-------------------+ *          1 +------+
|ClassA| ------<>----- |ClassAClassBMapping| -----<>----- |ClassB|
+------+               +-------------------+              +------+


Intention:
a unidirectional mapping of ClassB to ClassA without a special entity 
for ClassAClassBMapping

The following Scenario is working:

Enum MyEnum{
     A,B,C
}

@Entity (name="entity_a")
@Table(name="table_a")
class ClassA {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;

     @OneToMany(targetEntity = ClassB.class)
     @MapKey(name = "classb_id")
     @JoinTable(name = "ClassAClassBMapping", joinColumns = 
@JoinColumn(columnDefinition = "classa_id", table = "table_a", name = 
"id", nullable = false),
             inverseJoinColumns = @JoinColumn(columnDefinition = 
"classb_id", table = "table_b", name = "id", nullable = false),
             uniqueConstraints = @UniqueConstraint(columnNames = {
             "classa_id", "classb_id"
     }))
     private Map<MyEnum,ClassB> bClasses;
}

@Entity (name="entity_b")
@Table(name="table_b")
ClassB {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;

     @Embedded
     private MyEnum myEnum;
}

The trouble with this solution is the point, that the enumeration is not 
a property of ClassB but classification of ClassB in ClassA. As I use 
the enumeration as a property I will get lots of redundant datasets, 
that slowdown the application and make it difficult to handle modifications.

My favored solution is shown below but that solution doesn't work.

Entities:

@Embeddable
Enum MyEnum{
     A,B,C
}

@Entity (name="entity_a")
@Table(name="table_a")
class ClassA {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;

     @OneToMany(targetEntity = ClassB.class)
     @MapKey(name = "myEnum")
     @JoinTable(name = "ClassAClassBMapping", joinColumns = 
@JoinColumn(columnDefinition = "classa_id", table = "table_a", name = 
"id", nullable = false),
             inverseJoinColumns = @JoinColumn(columnDefinition = 
"classb_id", table = "table_b", name = "id", nullable = false),
             uniqueConstraints = @UniqueConstraint(columnNames = {
             "classa_id", "myEnum"
     }))
     private Map<MyEnum,ClassB> bClasses;
}

@Entity (name="entity_b")
@Table(name="table_b")
ClassB {
     @Id
     @GeneratedValue(strategy = GenerationType.AUTO)
     private Long id;
}

I cannot deliver an errormessage, because spring-framework only reports 
that the sessionfactory cannot be instantiated. As soon as I remove the 
mapping or change the mapping to the first example all JUnit-tests work 
fine. So I am sure that the configuration of spring is ok.

Any idea's what is the problem?

Kind Regards
Mark

---
 * Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24

Back to comp.lang.java.databases | Previous | NextNext in thread | Find similar


Thread

hibernate mapping problem "Mark Sudau" <mark.sudau@THRWHITE.remove-dii-this> - 2011-04-27 15:23 +0000
  Re: hibernate mapping pro "jlp" <jlp@THRWHITE.remove-dii-this> - 2011-04-27 15:23 +0000
    Re: hibernate mapping pro "jlp" <jlp@THRWHITE.remove-dii-this> - 2011-04-27 15:23 +0000

csiph-web