我正在尝试JOOQ生成数据库架构以将其与spring-boot一起使用。 我正在使用以下Maven配置:
<!-- Generator parameters -->
<generator>
<!-- The default code generator. You can override this one, to generate your own code style
Defaults to org.jooq.codegen.JavaGenerator -->
<name>org.jooq.codegen.JavaGenerator</name>
<!-- The naming strategy used for class and field names.
You may override this with your custom naming strategy. Some examples follow
Defaults to org.jooq.codegen.DefaultGeneratorStrategy -->
<database>
<name>org.jooq.meta.postgres.PostgresDatabase</name>
<!--<name>org.jooq.codegen.JavaGenerator</name>-->
<includes>.*</includes>
<excludes></excludes>
<inputSchema>public</inputSchema>
</database>
<target>
<packageName>org.jooq.codegen.maven.engletter</packageName>
<directory>target/generated-sources/jooq</directory>
</target>
<generate>
<javaTimeTypes>true</javaTimeTypes>
<validationAnnotations>true</validationAnnotations>
<springAnnotations>true</springAnnotations>
<pojosToString>true</pojosToString>
<jpaAnnotations>true</jpaAnnotations>
</generate>
<strategy>
<name>org.jooq.codegen.DefaultGeneratorStrategy</name>
<matchers>
<tables>
<table>
<recordImplements>ch.rsmch.backend.data.entity.TblEntity</recordImplements>
</table>
</tables>
</matchers>
</strategy>
</generator>
这对于具有单个键的实体非常有效。它为表tbladdservice生成如下代码:
/**
* Getter for <code>public.tbladdservice.id</code>. key
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false, precision = 64)
public Long getId() {
return (Long) get(0);
}
但是对于具有复合键(称为tbladdservicecon)的表,它只会生成:
// -------------------------------------------------------------------------
// Primary key information
// -------------------------------------------------------------------------
/**
* {@inheritDoc}
*/
@Override
public Record2<Long, Long> key() {
return (Record2) super.key();
}
此问题(据我了解):@Id丢失。 如果我在打电话
mvn spring-boot:run
我遇到此错误(并且应用程序无法启动):
CreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: org.jooq.codegen.maven.engletter.tables.records.TbladdserviceconRecord
是否可以说服JOOQ生成@Id语句?
非常感谢您的帮助。
要使之更清楚:
我有一个包含35个实体的PostgreSQL架构,其中一些实体创建为连接器,以打破m:m的关系,如此处的表所示:
Tables used here, in detail tbladdservicecon
JOOQ会正确生成所有东西,但是对于连接实体,它无法使Spring清楚密钥是什么。
由于此问题停止了上述错误的处理,因此我无法在Spring中使用JOOQ。直到现在我都没有使用这种实体(但是稍后会使用它)。还是有办法解决这个错误?
答案 0 :(得分:0)
卢卡斯·埃德(Lukas Eder)回答了这个问题(见评论):
Thorben Janssen在其关于Java的出色思想中给出了JOOQ和Hibernate良好结合的提示: Hibernate & jOOQ – A Match Made in Heaven。