我在Grails / PostgreSql应用程序中有POJO域类,我正在尝试将postgres序列生成器映射为其ID。
在POJO中:
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "flight_id")
public long getId() {
return id;
}
在Postgres中:
-- Sequence: flight_id
-- DROP SEQUENCE flight_id;
CREATE SEQUENCE flight_id
INCREMENT 1
MINVALUE 1n
MAXVALUE 9223372036854775807
START 1
CACHE 1;
ALTER TABLE flight_id
OWNER TO postgres;
当我尝试为该域运行grails generate-all时,我得到:
Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Unknown Id.generator: flight_id
除此之外,其他一切似乎都运转良好。我正在尝试使用Postres本机生成器,因此我可以选择针对独立于Grails应用程序的DB运行CRUD操作。
任何提示都将非常受欢迎。
答案 0 :(得分:2)
有两个问题:
错误地假设flight_id
中的generator = "flight_id"
直接引用数据库序列的名称,当它实际引用时:(直接来自文档):
要使用的主键生成器的名称 SequenceGenerator或TableGenerator注释
应该做的是将策略更改为GenerationType.SEQUENCE并定义与数据库序列一致的SequenceGenerator,并确保 name 属性的值相同GeneratedValue中 generator 属性的值。