我试图在我的项目中设置一个简单的Hibernate + Spring JPA存储库示例。我用的是oracle数据库,供参考。
我有一个简单的实体声明如下
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "item")
public class Item {
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private long Id;
private String name;
private String detail;
}
在运行项目时,hibernate在oracle中创建了一个名为hte_item
的表。
我已经设置了一个控制器,它试图获取表中的所有项目。我创建了以下存储库
import java.util.List;
import org.springframework.data.repository.CrudRepository;
public interface ItemRepository extends CrudRepository<Item, Long> {
List<Item> findAll();
}
相反,当运行itemRepository.findAll
时,Spring JPA对数据库运行以下查询。select i1_0.id,i1_0.detail,i1_0.name from item i1_0
抛出Oracle错误ORA-00942: Table or view does not exist
如果您注意到,查询不包括Hibernate生成的前缀,这会生成Oracle错误。我是否在这里遗漏了与配置相关的内容?
2条答案
按热度按时间2hh7jdfx1#
'hte'前缀意味着它是hibernate生成的临时表。它不是你的实体的table。
基本上,您需要手动或通过某些自动化过程创建表。例如,请参见How to create database schema in hibernate first time and further update it in case of schema modification?
wlzqhblo2#
在运行项目时,hibernate在oracle中创建了一个名为
hte_item
的表。hte_item
表是Hibernate用于某些批量更新和删除查询的临时表。它 * 不是 *Item
持久化的表的名称。因为你已经指定了
@Table(name = "item")
,所以你的数据库中必须有一个名为item
的表。如果你想让Hibernate为你导出那个表,那么你需要通过设置一个config属性来显式地启用schema导出:或者别的什么。