【发布时间】:2018-05-28 10:59:09
【问题描述】:
我在我的应用程序中使用 spring boot 和 hibernate,下面是 Model 类中的配置。
@Id
@SequenceGenerator(name="SCHEMA1.INQUIRY_QUEUE_SEQ", sequenceName="SCHEMA1.INQUIRY_QUEUE_SEQ",allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SCHEMA1.INQUIRY_QUEUE_SEQ")
@Column(name="INQ_ID")
private Integer inquiryId;
以前是xml配置数据库映射如下。
<hibernate-mapping>
<class name="com.company.domain.model.AnalystInquiryForm" table="INQUIRY_QUEUE" schema="SCHEMA1">
<id name="inquiryId" type="java.lang.Integer">
<column name="INQ_ID"/>
<generator class="sequence">
<param name="sequence">SCHEMA1.INQUIRY_QUEUE_SEQ</param>
</generator>
</id>
<property name="transactionDate" type="java.sql.Timestamp">
<column name="INQ_ADD_DT" />
</property>
</class>
</hibernate-mapping>
得到以下错误
16:08:36.873 [http-nio-8551-exec-2] DEBUG org.hibernate.SQL - select schema1.inquiry_queue_seq.nextval from dual
16:08:37.419 [http-nio-8551-exec-2] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 942, SQLState: 42000
16:08:37.431 [http-nio-8551-exec-2] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ORA-00942: table or view does not exist
16:36:23.977 [http-nio-8551-exec-2] ERROR com.company.user.controller.UserController - Error in processAnalystInquiry : could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet
我的spring boot配置如下。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>ojdbc</groupId>
<artifactId>ojdbc15</artifactId>
<version>11.2.0.2.0</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
</dependency>
中间层是
@Autowired
private AnalystInquiryFormRepository analystInquiryFormRepository;
public void addToInquiryQueue(AnalystInquiryForm form) {
analystInquiryFormRepository.save(form);
}
我的仓库是..
import org.springframework.data.repository.CrudRepository;
import com.company.user.model.AnalystInquiryForm;
public interface AnalystInquiryFormRepository extends
CrudRepository<AnalystInquiryForm, Integer>{
}
【问题讨论】:
-
您确定您的 schema1.inquiry_queue_seq 存在于您的数据库中吗?
-
这不是现有表。它是由休眠自动生成的。这是@SequenceGenerator 名称
-
是的但是这里sequenceName="SCHEMA1.INQUIRY_QUEUE_SEQ" 你指定了DB序列的名字,这个序列必须存在于DB中
-
@Michal 如何检查数据库中是否存在数据库序列
-
如果你连接到数据库(通过一些 sql 客户端)并调用 hibernate 所做的“从 dual 中选择 schema1.inquiry_queue_seq.nextval”。但我希望它丢失了。你需要在数据库中创建它。例如创建序列 INQUIRY_QUEUE_SEQ;
标签: java hibernate spring-boot jpa spring-data-jpa