1 module embeddedtest; 2 3 import hibernated.core; 4 5 import testrunner : BeforeClass, Test, AfterClass, runTests; 6 import hibernatetest : HibernateTest; 7 8 @Embeddable 9 class Address { 10 string street; 11 string city; 12 } 13 14 class Customer { 15 @Id @Generated 16 long cid; 17 18 string name; 19 20 Address shippingAddress; 21 22 @Embedded("billing") 23 Address billingAddress; 24 } 25 26 class EmbeddedTest : HibernateTest { 27 override 28 EntityMetaData buildSchema() { 29 return new SchemaInfoImpl!(Customer, Address); 30 } 31 32 @Test("embedded.creation") 33 void creationTest() { 34 Session sess = sessionFactory.openSession(); 35 scope(exit) sess.close(); 36 37 Customer c1 = new Customer(); 38 c1.name = "Kickflip McOllie"; 39 c1.shippingAddress = new Address(); 40 c1.shippingAddress.street = "1337 Rad Street"; 41 c1.shippingAddress.city = "Awesomeville"; 42 c1.billingAddress = new Address(); 43 c1.billingAddress.street = "101001 Robotface"; 44 c1.billingAddress.city = "Lametown"; 45 46 long c1Id = sess.save(c1).get!long; 47 assert(c1Id > 0); 48 } 49 50 @Test("embedded.read") 51 void readTest() { 52 Session sess = sessionFactory.openSession(); 53 scope(exit) sess.close(); 54 55 auto r1 = sess.createQuery("FROM Customer WHERE shippingAddress.city = :City") 56 .setParameter("City", "Awesomeville"); 57 Customer c1 = r1.uniqueResult!Customer(); 58 assert(c1 !is null); 59 assert(c1.shippingAddress.street == "1337 Rad Street"); 60 61 auto r2 = sess.createQuery("FROM Customer WHERE billingAddress.city = :City") 62 .setParameter("City", "Lametown"); 63 Customer c2 = r2.uniqueResult!Customer(); 64 assert(c2 !is null); 65 assert(c2.billingAddress.street == "101001 Robotface"); 66 } 67 68 @Test("embedded.update") 69 void updateTest() { 70 Session sess = sessionFactory.openSession(); 71 72 auto r1 = sess.createQuery("FROM Customer WHERE billingAddress.city = :City") 73 .setParameter("City", "Lametown"); 74 Customer c1 = r1.uniqueResult!Customer(); 75 assert(c1 !is null); 76 77 c1.billingAddress.street = "17 Neat Street"; 78 sess.update(c1); 79 80 // Create a new session to prevent caching. 81 sess.close(); 82 sess = sessionFactory.openSession(); 83 84 r1 = sess.createQuery("FROM Customer WHERE billingAddress.city = :City") 85 .setParameter("City", "Lametown"); 86 c1 = r1.uniqueResult!Customer(); 87 assert(c1 !is null); 88 assert(c1.billingAddress.street == "17 Neat Street"); 89 90 sess.close(); 91 } 92 93 @Test("embedded.delete") 94 void deleteTest() { 95 Session sess = sessionFactory.openSession(); 96 97 auto r1 = sess.createQuery("FROM Customer WHERE billingAddress.city = :City") 98 .setParameter("City", "Lametown"); 99 Customer c1 = r1.uniqueResult!Customer(); 100 assert(c1 !is null); 101 102 sess.remove(c1); 103 104 // Create a new session to prevent caching. 105 sess.close(); 106 sess = sessionFactory.openSession(); 107 108 r1 = sess.createQuery("FROM Customer WHERE billingAddress.city = :City") 109 .setParameter("City", "Lametown"); 110 c1 = r1.uniqueResult!Customer(); 111 assert(c1 is null); 112 113 sess.close(); 114 } 115 116 }