0

在 Grails 2.5.3 域类中,如何创建List嵌入对象的属性(不是域对象,也不是基本类型,如String,Integer等)?

我尝试了许多 , 等的组合static embeddedstatic hasMany但似乎没有一个有效。

大多数时候,我在运行 run-app 时遇到以下异常:

org.hibernate.MappingException

Missing type or column

for column[list_property_embedded_class]

on domain[DomainClass]

referencing[EmbeddedClassFQCN]

[] 中的值被我的实际类/列名替换。

(我重新分隔异常消息以使其更具可读性;它实际上是单行)

4

1 回答 1

1

如果您求助于使用传统的休眠而不是 GORM,那么您正在寻找的将是@ElementCollection注释。从 Hibernate 的示例中:

@Entity
public class User {
   [...]
   public String getLastname() { ...}

   @ElementCollection
   @CollectionTable(name="Addresses", joinColumns=@JoinColumn(name="user_id"))
   @AttributeOverrides({
      @AttributeOverride(name="street1", column=@Column(name="fld_street"))
   })
   public Set<Address> getAddresses() { ... } 
}

@Embeddable
public class Address {
   public String getStreet1() {...}
   [...]
}

我尝试使用单个域类和一个类列表创建一个测试项目,src/groovy但没有成功。我尝试了将注释应用到他们示例中的所有内容的不同变体,@ElementCollection但没有成功。我的假设是 Hibernate 注释根本不适用于 Grails 域类。这得到了Grails 文档的进一步支持,该文档将注释应用于src/java. 对我来说,我不认为这是一个值得的选择。

至于拥有 GORM 等价物@ElementCollection,在 Grails 中有一个未解决的 JIRA 票证,用于该确切功能:GRAILS-10095

我质疑嵌入式对象集合的需要或好处;static embedded与导致在域类的 SQL 表中真正嵌入附加列的传统嵌入对象(受支持)不同,嵌入集合将涉及拥有另一个表。从事 Hibernate 工作的人比我聪明,所以我确信这是有充分理由的。

于 2016-01-31T04:01:43.693 回答