Làm cách nào để ánh xạ Bản đồ trong JPA mà không sử dụng các lớp của Hibernate?Bản đồ JPA <String, String> mapping
Trả lời
Không có tác phẩm nào sau đây cho bạn?
@ManyToMany(cascade = CascadeType.ALL)
Map<String,EntityType> entitytMap = new HashMap<String, EntityType>();
EntityType
có thể là bất kỳ loại thực thể, trong đó có một String
.
Giả sử tôi có một tổ chức có tên là Book mà là có một bản đồ của chương:
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;
}
}
Nó làm việc cho tôi.
+1. Và nếu tôi muốn chỉ lấy lại chương 3 của tất cả những cuốn sách này? Tôi có một câu hỏi tương tự: http://stackoverflow.com/questions/12952625/jpa-category-language-relationship – ianaz
@ianaz 'select c từ Book b join b.chapters c trong đó khóa (c) = '3'' –
Thật không may, điều này đòi hỏi chú thích đặc biệt ngủ đông. Câu hỏi là một giải pháp không có. – RobertG
Mặc dù câu trả lời được đưa ra bởi Subhendu Mahanta là chính xác. Nhưng @CollectionOfElements
không còn được dùng nữa. Bạn có thể sử dụng thay vì @ElementCollection
:
@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>();
Không cần để tạo ra một lớp Entity riêng cho lĩnh vực Map
. Nó sẽ được thực hiện tự động.
Một ví dụ làm việc:
@ElementCollection(fetch=FetchType.EAGER)
@CollectionTable(name = "TABLENAME")
@MapKeyColumn(name = "KEY")
@Column(name = "VALUE")
public Map<String, String> getMap() {
return _map;
}
cho mối quan hệ nhiều-nhiều, bạn cũng cần 'joinColumns = @JoinColumn (name =" referencing_column ")' trong @CollectionTable và '@MapKeyJoinColumn (name =" referencing_column_other_table ")' – Blauhirn
Mã của tôi là dành cho Bản đồ
- 1. Tại sao java.util.Properties thực hiện Bản đồ <Object, Object> và không phải Bản đồ <String, String>
- 2. Java Generics đặt trên Bản đồ <String,? mở rộng Danh sách <String>>
- 3. Sử dụng FlurryAgent.onEvent (String EventId, Bản đồ <String, String> parameters)
- 4. Đưa vào một bản đồ <String, ?>
- 5. NEST lập bản đồ của Dictionary <string, object>
- 6. Dozer String để enum mapping
- 7. map <string, string> cách chèn dữ liệu vào bản đồ này?
- 8. JAX-RS, Bản đồ <String, String> đến JSON mà không có phí trên không?
- 9. Chuyển đổi một bản đồ <String, String> thành POJO
- 10. SWIG quấn một bản đồ <string, string> bằng Python như thế nào?
- 11. Lập bản đồ JPA Array
- 12. C++ bản đồ <string, vector <char>> truy cập
- 13. Không thể truyền một HashMap <String, String> đến một Giao diện mở rộng Bản đồ <String, String>
- 14. ArrayList <HashMap <String, String >> để String []
- 15. scala hibernate/jpa - bỏ qua bitmap được tạo tự động $ init $ 0 mapping
- 16. Mapping giữa T -> IHandler <T>
- 17. Mapping thêm thuộc tính trong một gia Bảng JPA 2
- 18. Làm thế nào để lập bản đồ IDictionary <string, Entity> trong thành thạo NHibernate
- 19. thành thạo NHibernate lập bản đồ IDictionary <string, class> một cách thông minh
- 20. deserializing một lĩnh vực bản đồ <String, Object> với Gson
- 21. Tại sao tôi không thể khởi tạo Bản đồ <int, String>?
- 22. Jackson - Phân tích cú pháp đệ quy vào Bản đồ <String, Object>
- 23. Sắp xếp bản đồ <String, Object> bằng các khóa bằng IgnoreCase?
- 24. Lập bản đồ JPA: "QuerySyntaxException: foobar không được ánh xạ ..."
- 25. JPA Bản đồ w/Entity Key và Entity Value
- 26. Lập bản đồ thừa kế với JPA/Hibernate
- 27. IDictionary <string, string> hoặc NameValueCollection
- 28. IDictionary <string, string> so với Dictionary <string, string>
- 29. StringDictionary vs Dictionary <string, string>
- 30. IDictionary <string, string> hoặc NameValueCollection
Tôi là một chút bối rối. Câu hỏi đặt ra là ánh xạ một Map, nhưng "câu trả lời hay nhất" là về một Map . Tôi có nhớ gì không –
whiskeysierra
EntityType có thể là bất kỳ loại thực thể nào, bao gồm một Chuỗi. –
Có bao nhiêu bảng này tạo ra? Có (1) một cho lớp gốc, (2) một bảng nối (với các khóa cho lớp gốc và loại thực thể) và (3) một bảng khác cho EntityType (trong kịch bản đã cho), một bảng chỉ với tham gia khóa bảng và chuỗi được ánh xạ)? Điều này có thể là rất nhiều chi phí, tùy thuộc vào các chuỗi được lưu ... – RobertG