New many to many relationships
authorGeorgios Gousios <gousiosg@gmail.com>
Mon, 19 Sep 2011 13:57:58 +0000 (16:57 +0300)
committerGeorgios Gousios <gousiosg@gmail.com>
Mon, 19 Sep 2011 13:57:58 +0000 (16:57 +0300)
-ResourceType and ServiceTemplate (A service template is constructed
by many allowed resource types while obviously a resource type can
be used in many service templates)
-Entity and Organization (An organization may include many users
and groups while a user or group may belong to many organizations)

model/src/main/scala/gr/grnet/aquarium/model/Entity.scala
model/src/main/scala/gr/grnet/aquarium/model/Organization.scala
model/src/main/scala/gr/grnet/aquarium/model/ResourceType.scala
model/src/main/scala/gr/grnet/aquarium/model/ServiceTemplate.scala

index bd7398f..5ae611d 100644 (file)
@@ -24,4 +24,9 @@ abstract class Entity extends Id {
   @OneToMany(mappedBy = "owner",  targetEntity = classOf[ServiceItem],
              cascade = Array(CascadeType.ALL))
   var serviceItems : Set[ServiceItem] = new HashSet[ServiceItem]()
+
+  @ManyToMany(targetEntity = classOf[Organization],
+              mappedBy = "entities",
+              cascade = Array(CascadeType.ALL))
+  var organizations : Set[Organization] = new HashSet[Organization]()
 }
\ No newline at end of file
index 7acfe54..d09d82c 100644 (file)
@@ -1,6 +1,7 @@
 package gr.grnet.aquarium.model
 
 import javax.persistence._
+import java.util.{Set, HashSet}
 
 @Table(name = "ORGANIZATION")
 @javax.persistence.Entity
@@ -16,11 +17,10 @@ class Organization extends Id {
   @JoinColumn(name = "PARENT_ORG_ID")
   var parent : Organization = _
 
-  @OneToMany(mappedBy = "org",  targetEntity = classOf[Group],
-             cascade = Array(CascadeType.ALL))
-  var groups : java.util.Set[Group] = new java.util.HashSet[Group]()
-
-  @OneToMany(mappedBy = "org",  targetEntity = classOf[User],
-             cascade = Array(CascadeType.ALL))
-  var users : java.util.Set[User] = new java.util.HashSet[User]()
+  @ManyToMany(targetEntity = classOf[Entity],
+              cascade = Array(CascadeType.ALL))
+  @JoinTable(name="ENTITY_ORGANIZATION",
+             joinColumns = Array(new JoinColumn(name="ENTITY_ID")),
+             inverseJoinColumns = Array(new JoinColumn(name="ORGANIZATION_ID")))
+  var entities : Set[Entity] = new HashSet[Entity]()
 }
\ No newline at end of file
index a02c75c..37ef758 100644 (file)
@@ -1,7 +1,7 @@
 package gr.grnet.aquarium.model
 
 import javax.persistence._
-import java.util.{Set, HashSet}
+import java.util.{HashSet, Set}
 
 @javax.persistence.Entity
 @Table(name = "RESOURCE_TYPE")
@@ -21,6 +21,10 @@ class ResourceType extends Id {
              cascade = Array(CascadeType.ALL))
   var consResources : Set[ConsumableResource] = new HashSet[ConsumableResource]()
 
+  @ManyToMany(targetEntity = classOf[ServiceTemplate],
+              mappedBy = "resTypes",
+              cascade= Array(CascadeType.ALL))
+  var srvTemplates : Set[ServiceTemplate] = new HashSet[ServiceTemplate]()
 }
 
 object ResourceType {
index 9378a71..d734a0f 100644 (file)
@@ -1,12 +1,15 @@
 package gr.grnet.aquarium.model
 
-import java.util.{HashSet, Set}
 import javax.persistence._
+import java.util.{HashSet, Set}
 
 @Table(name = "SERVICE_TEMPLATE")
 @javax.persistence.Entity
 class ServiceTemplate extends Id {
 
+  @Column(name = "NAME")
+  var name : String = _
+
   @OneToMany(mappedBy = "template",  targetEntity = classOf[DefaultPermission],
              cascade = Array(CascadeType.ALL))
   var permissions : Set[DefaultPermission] = new HashSet[DefaultPermission]()
@@ -15,8 +18,10 @@ class ServiceTemplate extends Id {
              cascade = Array(CascadeType.ALL))
   var items : Set[ServiceItem] = new HashSet[ServiceItem]()
 
-  @ManyToOne(cascade = Array(CascadeType.ALL),
-             targetEntity = classOf[ServiceTemplate])
-  @JoinColumn(name = "RESOURCE_TYPE_ID")
-  var resType : ResourceType = _
+  @ManyToMany(targetEntity = classOf[ResourceType],
+              cascade = Array(CascadeType.ALL))
+  @JoinTable(name="SERVICE_TEMPLATE_RESOURCES",
+             joinColumns = Array(new JoinColumn(name="RESOURCE_TYPE_ID")),
+             inverseJoinColumns = Array(new JoinColumn(name="RESOURCE_ID")))
+  var resTypes : Set[ResourceType] = new HashSet[ResourceType]()
 }
\ No newline at end of file