Finally got composite key right
authorGeorgios Gousios <gousiosg@gmail.com>
Thu, 15 Sep 2011 12:12:36 +0000 (15:12 +0300)
committerGeorgios Gousios <gousiosg@gmail.com>
Thu, 15 Sep 2011 12:12:36 +0000 (15:12 +0300)
model/src/main/scala/gr/grnet/aquarium/model/ConsumableResource.scala
model/src/main/scala/gr/grnet/aquarium/model/Group.scala
model/src/main/scala/gr/grnet/aquarium/model/Organization.scala
model/src/main/scala/gr/grnet/aquarium/model/ServiceItem.scala
model/src/main/scala/gr/grnet/aquarium/model/ServiceItemConfig.scala
model/src/main/scala/gr/grnet/aquarium/model/User.scala
model/src/test/scala/gr/grnet/aquarium/model/test/JPATest.scala

index 3afb0d9..f7bfd6d 100644 (file)
@@ -6,9 +6,6 @@ import javax.persistence._
 @javax.persistence.Entity
 class ConsumableResource extends Id {
 
-  @Column(name = "NAME")
-  var name : String = _
-
   @Column(name = "RESOURCE_TYPE")
   var restype : String = _
 
@@ -19,6 +16,6 @@ class ConsumableResource extends Id {
   var cost : Float = _
 
   @OneToMany(mappedBy = "resource",  targetEntity = classOf[ServiceItemConfig],
-             cascade = Array(CascadeType.REMOVE))
+             cascade = Array(CascadeType.ALL))
   var configItems : java.util.Set[ServiceItemConfig] = new java.util.HashSet[ServiceItemConfig]()
 }
\ No newline at end of file
index d01ec6c..505e3e6 100644 (file)
@@ -10,11 +10,12 @@ class Group extends Entity {
   @JoinColumn(name = "SUB_GROUP_ID")
   var group :Group = _
 
-  @ManyToOne(optional = true)
+  @ManyToOne(cascade = Array(CascadeType.ALL),
+             optional = true)
   var org : Organization = _
 
   @ManyToMany(targetEntity = classOf[User],
-              cascade= Array(CascadeType.PERSIST, CascadeType.MERGE))
+              cascade= Array(CascadeType.ALL))
   @JoinTable(name="USER_GROUP",
              joinColumns = Array(new JoinColumn(name="USER_ID")),
              inverseJoinColumns = Array(new JoinColumn(name="GROUP_ID")))
index d97c9a0..7acfe54 100644 (file)
@@ -17,10 +17,10 @@ class Organization extends Id {
   var parent : Organization = _
 
   @OneToMany(mappedBy = "org",  targetEntity = classOf[Group],
-             cascade = Array(CascadeType.REMOVE))
+             cascade = Array(CascadeType.ALL))
   var groups : java.util.Set[Group] = new java.util.HashSet[Group]()
 
   @OneToMany(mappedBy = "org",  targetEntity = classOf[User],
-             cascade = Array(CascadeType.REMOVE))
+             cascade = Array(CascadeType.ALL))
   var users : java.util.Set[User] = new java.util.HashSet[User]()
 }
\ No newline at end of file
index 59b96e7..945bf90 100644 (file)
@@ -4,12 +4,13 @@ import javax.persistence._
 
 @javax.persistence.Entity
 @Table(name = "SERVICE_ITEM")
+@NamedQuery(name="allServiceItems", query="select si from ServiceItem si")
 class ServiceItem extends Id {
 
   @Column(name = "URL")
   var url : String = ""
 
   @OneToMany(mappedBy = "item",  targetEntity = classOf[ServiceItemConfig],
-             cascade = Array(CascadeType.REMOVE))
+             cascade = Array(CascadeType.ALL))
   var configItems : java.util.Set[ServiceItemConfig] = new java.util.HashSet[ServiceItemConfig]()
 }
index 7e2126b..a949d82 100644 (file)
@@ -2,24 +2,22 @@ package gr.grnet.aquarium.model
 
 import javax.persistence._
 
-case class ServiceItemConfigKey(var item_id : Int, var resource_id : Int)
+case class ServiceItemConfigKey(var item_id : Long, var resource_id : Long)
 
 @Table(name = "SERVICE_ITEM_CONFIG")
 @IdClass(classOf[ServiceItemConfigKey])
 @javax.persistence.Entity
 class ServiceItemConfig {
 
-  //def this() = this("")
-
   @javax.persistence.Id
   @Column(name ="SERVICE_ITEM_ID", nullable=false, updatable=false,
           insertable=false)
-  var item_id: Int = _
+  var item_id: Long = _
 
   @javax.persistence.Id
   @Column(name ="CONSUMABLE_RESOURCE_ID", nullable=false, updatable=false,
           insertable=false)
-  var resource_id: Int = _
+  var resource_id: Long = _
 
   @ManyToOne (cascade = Array(CascadeType.ALL),
               targetEntity = classOf[ServiceItem])
index f304855..e37e15c 100644 (file)
@@ -12,7 +12,7 @@ class User extends Entity {
 
   @ManyToMany(targetEntity = classOf[Group],
               mappedBy = "users",
-              cascade = Array(CascadeType.PERSIST, CascadeType.MERGE))
+              cascade = Array(CascadeType.ALL))
   var groups : java.util.Set[Group] = new java.util.HashSet[Group]()
 
 }
\ No newline at end of file
index cf3cb01..f383ae0 100644 (file)
@@ -45,8 +45,48 @@ class TestJPAWeb {
 
     assertTrue(org1.id != org2.id)
 
-    val results = DB.find(classOf[Organization], org1.id)
+    var results = DB.find(classOf[Organization], org1.id)
     assert(results.exists(o => o.id == org1.id))
+
+    //Add to entity with composite key
+    val srv1 = new ServiceItem
+    srv1.url = "http://foo.bar/"
+    DB.persist(srv1)
+
+    val res1 = new ConsumableResource
+    res1.restype = "CPU"
+    res1.unittype = "CPU/hr"
+    res1.cost = 10
+    DB.persist(res1)
+
+    val res2 = new ConsumableResource
+    res2.restype = "RAM"
+    res2.unittype = "MB/hr"
+    res2.cost = 11
+    DB.persist(res2)
+
+    addServiceConfig(srv1, res1, 4)
+    addServiceConfig(srv1, res2, 128)
+
+    val a = DB.find(classOf[ServiceItem], srv1.id)
+    assert(a.exists(o => o.id == srv1.id))
+    assertEquals(2, a.get.configItems.size)
+
+    //Entity navigation tests
+    val all = DB.findAll("allServiceItems")
+  }
+
+  private def addServiceConfig(srv : ServiceItem,
+                               res : ConsumableResource,
+                               value : Int) {
+    val srvcfg2 = new ServiceItemConfig
+    srvcfg2.item = srv
+    srvcfg2.resource = res
+    srvcfg2.quantity = value
+    srv.configItems.add(srvcfg2)
+    res.configItems.add(srvcfg2)
+    DB.persist(srvcfg2)
+    DB.flush()
   }
 
   @After