2012-03-04 45 views
-2

我想映射一个实体包含一个集合,而不使用JoinTable。 我保持有例外的情况是: org.hibernate.AnnotationException:使用@OneToMany或@ManyToMany针对未映射类:Foo.collection [java.lang.String中]休眠异常:试图映射集合OneToMany无JoinTable

我知道,它的工作原理与JoinTable,但后来我得到2张桌子,而我只需要一张桌子。我知道如果它有效,那么我会在表格中多次使用“名称”(集合中的每个元素都有一个)。

我看着文档中(http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html#entity-mapping-association参见:2.2.5.3.1.2单向和http://docs.oracle.com/javaee/6/api/javax/persistence/OneToMany.html)和许多例子,但我却找不到我做错了什么:( 我也发现很多问题在这个问题上,其中最常见的答案是使用JoinTable,但这不是我正在寻找的解决方案。

我尝试使用它,就像使用@JoinColumn(name =“ID”,referencedColumnName =“NAME”),但没有好处..

我使用的Java6,JPA2,休眠3.5.4和MySQL

有什么建议? 由于提前, 巴巴

@Entity 
@Table(name = "T1") 
public class Foo { 

private long id; 

    private String name; 

    protected Collection<String> collection; 

@Id 
@GeneratedValue 
@Column(name = "ID") 
public long getId() { 
    return id; 
} 

@Basic 
@Column(name = "NAME", nullable = false, unique = true) 
public String getName() { 
    return name; 
} 

    @Column(name = "COLLECTION") 
@OneToMany(cascade = CascadeType.ALL) 
@JoinColumn(name = "ID") 
public Collection<String> getCollection() { 
    return collection; 
} 

    /* 
    * setters... 
    */ 
} 
+1

的可能重复[如何坚持JPA类型列表的财产(http://stackoverflow.com/questions/287201/how-to-persist-a-property-of-type-liststringin -jpa) – ruakh 2012-03-04 20:17:40

+0

它看起来不像是我的重复 - 或者我只是不知道它... – 2012-03-04 20:26:42

+0

根据那里的答案,将@ @ OneToMany改为@ @ CollectionOfElements应该可以解决这个问题。情况并非如此吗? – ruakh 2012-03-04 20:28:54

回答

2

这是Hibernate文档。

@ElementCollection 
@CollectionTable(name="Nicknames", [email protected](name="user_id")) 
@Column(name="nickname") 
public Set<String> getNicknames() { ... } 
+0

这不是这种情况。你的解决方案创建2个表,而我试图只用一个表(就像我在问题中写的那样)。无论如何,谢谢:) – 2012-03-04 21:55:20

+1

如何将基础实体和集合存储在一张表中? – 2012-03-05 06:03:35

+0

它可能在数据库中,我看到它(在Oracle表中)。我只是试图用hibernate来实现这一点,以便将整个过程电脑化。那是我的问题。 – 2012-03-05 08:26:33