JavaPersistenceWithHibernate第二版笔记-第七章-001Mapping a set(@ElementCollection、@CollectionTable、@JoinColumn、)
一、结构


二、代码
1.
1 package org.jpwh.model.collections.setofstrings; 2 3 import org.jpwh.model.Constants; 4 5 import javax.persistence.CollectionTable; 6 import javax.persistence.Column; 7 import javax.persistence.ElementCollection; 8 import javax.persistence.Entity; 9 import javax.persistence.GeneratedValue; 10 import javax.persistence.Id; 11 import javax.persistence.JoinColumn; 12 import java.util.HashSet; 13 import java.util.Set; 14 15 @Entity 16 public class Item { 17 18 @Id 19 @GeneratedValue(generator = Constants.ID_GENERATOR) 20 protected Long id; 21 22 @ElementCollection 23 @CollectionTable( 24 name = "IMAGE", // Defaults to ITEM_IMAGES 25 joinColumns = @JoinColumn(name = "ITEM_ID")) // Default, actually 26 @Column(name = "FILENAME") // Defaults to IMAGES 27 protected Set<String> images = new HashSet<String>(); // Initialize field here 28 29 public Long getId() { 30 return id; 31 } 32 33 public Set<String> getImages() { 34 return images; 35 } 36 37 public void setImages(Set<String> images) { 38 this.images = images; 39 } 40 41 // ... 42 }
2.
1 package org.jpwh.test.collections; 2 3 import org.jpwh.env.JPATest; 4 import org.jpwh.model.collections.setofstrings.Item; 5 import org.testng.annotations.BeforeClass; 6 import org.testng.annotations.Test; 7 8 import javax.persistence.EntityManager; 9 import javax.transaction.UserTransaction; 10 11 import static org.testng.Assert.assertEquals; 12 13 public class SetOfStrings extends JPATest { 14 15 @Override 16 public void configurePersistenceUnit() throws Exception { 17 configurePersistenceUnit("SetOfStringsPU"); 18 } 19 20 @Test 21 public void storeLoadCollection() throws Exception { 22 UserTransaction tx = TM.getUserTransaction(); 23 try { 24 tx.begin(); 25 EntityManager em = JPA.createEntityManager(); 26 Item someItem = new Item(); 27 28 someItem.getImages().add("foo.jpg"); 29 someItem.getImages().add("bar.jpg"); 30 someItem.getImages().add("baz.jpg"); 31 someItem.getImages().add("baz.jpg"); // Duplicate, filtered at Java level by HashSet! 32 33 em.persist(someItem); 34 tx.commit(); 35 em.close(); 36 Long ITEM_ID = someItem.getId(); 37 38 tx.begin(); 39 em = JPA.createEntityManager(); 40 Item item = em.find(Item.class, ITEM_ID); 41 assertEquals(item.getImages().size(), 3); 42 tx.commit(); 43 em.close(); 44 } finally { 45 TM.rollback(); 46 } 47 } 48 49 }
It doesn’t seem likely that you’d allow the user to attach the same image more than once to the same item,
You can do anything you set your mind to, man!

浙公网安备 33010602011771号