Grails GORM:嵌入包含对域类引用的类

Grails GORM:嵌入包含对域类引用的类,grails,gorm,Grails,Gorm,鉴于: 用户,文件是域类 src/groovy/Container.groovy: class Container { User user File file Date dateCreated } grails app/domain/WithContainer.groovy: class WithContainer { Container c String text static embedded = ['c'] } 我的目标是将WithContainer映

鉴于:

  • 用户
    文件
    是域类
  • src/groovy/Container.groovy:

    class Container {
      User user
      File file
      Date dateCreated
    }
    
  • grails app/domain/WithContainer.groovy:

    class WithContainer {
      Container c
      String text
    
      static embedded = ['c']
    }
    
我的目标是将WithContainer映射到包含以下列的表:

user_id | file_id | date_created | text
GORM可以实现吗

此设置产生:

org.hibernate.MappingException: Could not determine type for: User, at table: with_container, for columns: [org.hibernate.mapping.Column(c_user)]

谢谢

容器
不是域类,因为它没有在
grails app/domain/
下定义


您可能对
嵌入的
属性感到困惑。
embedded
列表中的属性是持久属性,您希望它们的所有属性都存储在与所属类相同的表中(在您的情况下是
WithContainer
),而不是存储在它们自己的表中并用外键引用。属性仍然需要是一个域类的实例。

是否有理由在域类中不使用
Container
?我刚刚遇到了一个我认为更常见的场景,即我在src/groovy下有一个Address类,它由5个公共地址字段(street1、street2、city、zip、state)组成并且在多个域对象中用作嵌入式对象(甚至是一个对象的计费/发货地址的两倍)。所有地址字段都是字符串,但我想将其重构为“State”域对象的实例,而不是“String”。我认为这是一个有效的用例,我想知道这是否可能,或者我是否需要重构对象?谢谢。但是,为了在数据库中具有上述映射,这些类是否可以进行不同的构造?我的目标是拥有多个域类,它们共享一组属于域类型的公共属性,同时使各自的表与上述结构对齐。我想我的目标是介于tablePerHierarchy=true(一个大表)和tablePerHierarchy=false(多个表,但引用一个表)之间。