Là mới đối với ORM, tôi muốn tìm cách xác định ánh xạ đơn giản (nghĩa là không có thực thể bổ sung) cho danh sách (hoặc tập hợp) các chuỗi trong thực thể. Tôi đã tìm thấy mẫu này:Lập bản đồ JPA cho một Danh sách hoặc Thiết lập <String>
import java.util.Set;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Book {
@Id
@GeneratedValue
private Long id;
@ElementCollection
@CollectionTable(name = "tags")
private Set<String> tags;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Set<String> getTags() {
return tags;
}
public void setTags(Set<String> tags) {
this.tags = tags;
}
}
dường như phù hợp với nhu cầu của tôi. Tuy nhiên, chế biến lớp này với Eclipse hibernate3-maven-plugin:2.2:hbm2ddl
, tôi kết thúc với các lỗi sau:
[ERROR] Failed to execute goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2ddl (default) on project test-database: Execution default of goal org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2ddl failed: Could not determine type for: java.util.Set, at table: Book, for columns: [org.hibernate.mapping.Column(tags)] -> [Help 1]
Xác định @ElementCollection(targetClass=String.class)
không giúp đỡ. Thêm một định nghĩa cột vào tags
trường (@Column(name = "tags", columnDefinition="character varying (255)", nullable = false)
) dẫn đến một xây dựng thành công nhưng sản xuất SQL này:
create table Book (
id int8 not null,
tags character varying (255) not null,
primary key (id)
);
mà không phải là những gì tôi muốn, như tôi đã mong đợi để kết thúc với một bảng tags
liên quan đến những cuốn sách bàn. Ai đó có thể chỉ cho tôi hướng đi đúng không? Cảm ơn bạn.
W00t! Cảm ơn bạn. Thật vậy, các plugin sử dụng một phiên bản cũ của Hibernate. Cập nhật pom lên phiên bản mới hơn đã giải quyết được vấn đề. – Blablalux