Essendo nuovo in ORM, mi piacerebbe trovare un modo per definire un mapping semplice (significato senza un'ulteriore entità) per un elenco (o un insieme) di stringhe all'interno di un'entità. Ho trovato questo esempio:Mappatura JPA per un elenco o un set <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;
}
}
che sembra corrispondere alle mie esigenze. Tuttavia, l'elaborazione di questa classe con Eclipse di hibernate3-maven-plugin:2.2:hbm2ddl
, io alla fine con il seguente errore:
[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]
specificare @ElementCollection(targetClass=String.class)
non ha aiutato. L'aggiunta di una definizione di colonna al tags
campo (@Column(name = "tags", columnDefinition="character varying (255)", nullable = false)
) porta ad un accumulo di successo, ma produce questo SQL:
create table Book (
id int8 not null,
tags character varying (255) not null,
primary key (id)
);
che non è quello che voglio, come mi aspettavo di finire con un tavolo tags
legata ai libri tavolo. Qualcuno potrebbe indicarmi la giusta direzione? Grazie.
W00t! Grazie. In effetti il plugin utilizzava una vecchia versione di Hibernate. L'aggiornamento del pom a una versione più recente ha risolto il problema. – Blablalux