2009-05-12 33 views

cevap

16

Aşağıdaki çalışma sizin için uygun değil mi?

@ManyToMany(cascade = CascadeType.ALL) 
Map<String,EntityType> entitytMap = new HashMap<String, EntityType>(); 

EntityType bir String dahil olmak üzere herhangi varlık türü olabilir. Bana uyar

import java.io.Serializable; 
import java.util.Map; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.JoinTable;  
import org.hibernate.annotations.CollectionOfElements; 
import org.hibernate.annotations.MapKey; 
@Entity 
public class Book implements Serializable{ 
@Column(name="BOOK_ID") 
@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private Long bookId;  

@CollectionOfElements(targetElement=java.lang.String.class) 
@JoinTable(name="BOOK_CHAPTER", 
     [email protected](name="BOOK_ID")) 
@MapKey ([email protected](name="CHAPTER_KEY")) 
@Column(name="CHAPTER") 
private Map<String,String> chapters; 
public Long getBookId() { 
    return bookId; 
} 
public void setBookId(Long bookId) { 
    this.bookId = bookId; 
} 
public Map<String,String> getChapters() { 
    return chapters; 
} 
public void setChapters(Map<String,String> chapters) { 
    this.chapters = chapters; 
}    

} 

: Varsayalım

+12

Biraz kafam karıştı. Soru, Haritasının haritalandırılmasıyla ilgiliydi, ancak "en iyi yanıt", Haritası ile ilgilidir. Bir şey mi özledim? – whiskeysierra

+9

EntityType, String de dahil olmak üzere herhangi bir varlık türü olabilir. –

+2

Bu, kaç tane tablo oluşturur? Orjinal sınıf için bir (1), (2) bir birleşim tablosu (orijinal sınıf ve varlık türü için tuşlar) ve (3) EntityType için başka bir tablo var mı (verilen senaryoda, yalnızca birleşim içeren bir tablo) tablo anahtarı ve eşlenen dize)? Kaydedilen Dizeleri bağlı olarak bu çok fazla yük olabilir ... – RobertG

10

Ben fasıl Haritası yaşıyor Kitap adında bir varlık var. Subhendu Mahanta tarafından verilen cevap doğru olmasına rağmen,

+0

+1. Peki ya tüm bu kitapların sadece 3. bölümünü almak istersem? Benzer bir sorum var: http://stackoverflow.com/questions/12952625/jpa-category-language-relationship – ianaz

+1

@ianaz 'c'den seç c b.chapters c anahtarını girin (c) = '3'' –

+3

Maalesef, bu hazırda bekletme ek açıklamaları gerektirir. Soru, çözüm olmayan bir çözümdü. Çoktan çoğa bir ilişki için – RobertG

14

. Ancak @CollectionOfElements kullanımdan kaldırılmıştır. Bunun yerine @ElementCollection kullanabilirsiniz: Map alan için ayrı varlık sınıfı oluşturmak için gerek yoktur

@ElementCollection 
@JoinTable(name="ATTRIBUTE_VALUE_RANGE", [email protected](name="ID")) 
@MapKeyColumn (name="RANGE_ID") 
@Column(name="VALUE") 
private Map<String, String> attributeValueRange = new HashMap<String, String>(); 

. Otomatik olarak yapılacaktır.

1

Bir çalışma örneği:

 @ElementCollection(fetch=FetchType.EAGER) 
     @CollectionTable(name = "TABLENAME") 
     @MapKeyColumn(name = "KEY") 
     @Column(name = "VALUE") 
     public Map<String, String> getMap() { 
      return _map; 
     } 
+0

, ayrıca @CollectionTable ve '@MapKeyJoinColumn (name =" referencing_column_other_table ")' – Blauhirn

+0

Benim kodum birleşim için 'joinColumns = @JoinColumn (name =" referencing_column ")' gerekir. öğesinde –

İlgili konular