我使用 Spring 和 Hibernate 作为 JPA 实现者进行了以下数据库设置。我有一个扩展 org.springframework.data.jpa.domain.AbstractPersistable 的实体类,它基本上定义了一个具有 AUTO 生成策略的 id 属性。
如果正确阅读所有内容,这将意味着 JPA 实现者(在我的例子中为 Hibernate)负责生成 id。
它适用于使用 PostgreSQL 的实际设置,但不适用于此嵌入式设置:
<jdbc:embedded-database id="dataSource" type="HSQL">
<jdbc:script location="classpath:/sql/schema.sql" />
</jdbc:embedded-database>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.HSQLDialect" />
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
实体类
@Entity
public class Account extends AbstractPersistable<Long> {
private static final long serialVersionUID = 1L;
@NotNull
@Size(min=1, max=25)
private String name;
}