Mark Sudau a |-crit :
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
I don't understand your solution:
If you have A 1->* B
in class A, put a Collection of B ..
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!