我正在尝试在 Grails 2.2.1 中使用具有多对一关系的嵌入式域。这是我正在尝试做的简化版本。
我正在映射到现有的数据库表:
create table incident (id bigint generated by default as identity, state_id bigint not null, primary key (id));
create table state (id bigint generated by default as identity, name varchar(255) not null, primary key (id));
alter table incident add constraint FK52F44D27499E79E foreign key (state_id) references state;
映射到“事件”表的域:
class Incident {
Vehicle vehicle
static embedded = ['vehicle']
}
class Vehicle{
State state
static mapping = {
state column: 'state_id'
}
}
映射到“状态”表的域:
class State {
String name
}
当我尝试运行我的应用程序时,我收到以下错误:
消息:创建名为“transactionManagerPostProcessor”的 bean 时出错:bean 初始化失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的 bean 时出错:设置 bean 属性“sessionFactory”时无法解析对 bean“sessionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是org.hibernate.MappingException:无法确定类型:test.State,在表:事件,列:[org.hibernate.mapping.Column(vehicle_state)]
是否可以在嵌入式域中建立多对一关联?
--更新--
我最终使用了一种解决方法来获取状态。
class Vehicle{
static transients = [ "state" ]
Long stateId
static mapping = {
stateId column: 'state_id'
}
State getState(){
State.get(this.stateId)
}
}