当前位置: 首页 > 知识库问答 >
问题:

Spring与Hibernate的集成

拓拔欣嘉
2023-03-14

我试图向现有的Spring应用程序添加两个额外的表。一个正在数据库中创建,但另一个没有。我看不到JPA对象有任何明显的区别,我已经更新了这两个对象的DB属性。两个表之间唯一的主要区别是,一个表以双向关系映射到用户的表,另一个表只有一个方向。

以下是一些代码示例:

持久性.xml:

<persistence-unit name="samplePersistenceUnit" transaction-type="RESOURCE_LOCAL">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.bpc.services.domain.objects.User</class>
    <class>com.bpc.services.domain.objects.Account</class>
    <class>com.bpc.services.domain.objects.Transaction</class>
    <class>com.bpc.services.domain.objects.Payment</class>
    <class>com.bpc.services.domain.objects.Product</class>
   <properties>
       <!-- value="create" to build a new database on each run; value="update" to modify an existing database; value="create-drop" means the same as "create" but also drops tables when Hibernate closes; value="validate" makes no changes to the database -->
       <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
       <property name="hibernate.connection.charSet" value="UTF-8"/>
       <property name="hbm2ddl.auto" value="update"/>
       <property name="show_sql" value="true"/>
       <property name="hibernate.hbm2ddl.auto" value="update"/>
       <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
   </properties>

data-context.xmlJPA声明:

<jpa:repositories base-package="com.bpc.services.domain.repositories" />

产品实体:

@Entity
@Table(name = "product")
public class Product extends BaseEntity {

支付实体:

@Entity
@Table(name = "payment")
public class Payment extends BaseEntity {
    @ManyToOne
    User user;

用户实体:

@Entity
@Table(name="rest_user")
public class User extends BaseEntity {
    @OneToMany(mappedBy="user",
        targetEntity=Payment.class,
        cascade= CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Payment> payments = new ArrayList<Payment>();

账户实体:

@Entity
@Table(name = "rest_account")
public class Account extends BaseEntity {
    @ManyToOne
    private Product appliedProduct;

产品表已创建 ,并链接到 *:1 关系中的帐户对象。但是我的付款表丢失了。部署运行正常,日志中显示以下内容:

[本地主机启动停止-1]DEBUG 组织Hibernate.cfg.Ejb3列 - 绑定列: Ejb3列{表=组织.Hibernate.映射.表(付款), 映射列 =id, 可插入= true, 可更新= 真, 唯一=假}

因此,应用程序知道 Pay domain 对象,并在部署中使用它,但是当我尝试通过客户端使用我的服务时,日志显示以下内容:

调试 o.h.e.jdbc.spi.SqlExceptionHelper - 无法提取结果集 [n/a] com.mysql.jdbc.exceptions.jdbc4.MySQLSyntax 错误异常: 表 'services.payment' 不存在

[http-bio-8080-exec-3]警告o.h.e.jdbc.spi。SqlExceptionHelper-SQL错误:1146,SQL状态:42S02

[http-bio-8080-exec-3]错误o . h . e . JDBC . SPI . sqlexception helper-Table ' services . payment '不存在

更新我尝试用“创建”而不是“更新”运行(如答案中所建议的),但出现了同样的问题。现在有一个额外的日志条目与付款表相关:

11: 37:14.994[localhost-startStop-1]调试o.s.j.d.LazyConnectionDataSourceProxy-连接到数据库进行操作“createStatement”

11: 37:14.999[localhost-startStop-1]调试org.hibernate。SQL-alter table payment drop外键FK_5B79940UENR1FFUSDUS7CP2R

11:37:15.012[localhost-start Stall-1]错误o.h.tool.hbm2ddl.SchemaExport-HHH000389:不成功:更改表付款删除外键FK_5b79940uennr1ffusdus7cp2r

11:37:15.012[localhost-start stop-1]错误o . h . tool . hbm 2 DDL . schema export-Table ' services . payment '不存在

11:37:15.012 [本地主机启动停止 1] DEBUG 组织Hibernate.SQL - 更改表rest_account删除外键FK_ek67yy1rmivvpoofrc0603du9

11:37:15.513 [本地主机启动停止 1] DEBUG 组织Hibernate.SQL - 更改表rest_verification_token删除外键FK_9i1lxa0i6h09fcobtm570hq7u

11:37:16.000[localhost-start Stop-1]DEBUGorg.hibernate.SQL-更改表事务删除外键FK_8i8qo3qvlyg4xaiqgrnbpfvvh

11: 37:16.498[localhost-startStop-1]调试org.hibernate。SQL-alter table transactions删除外键FK_ce9ag0mlblwcp5n1bi1f2xwgs

11:37:16.993[localhost-start Stall-1]DEBUGorg.hibernate.SQL-删除表如果存在付款

当加载支付存储库时(无任何例外),这将显示在日志中:

身份插入:插入到付款中(创建时间、uuid、版本、描述、输入、输出、执行人、用户、用户id)值(?、、、、?、?、、?)

11:37:14.919[localhost-start Stop-1]DEBUGo.h.l.p.b.i.spaces.QuerySpacesImpl-添加QuerySpace: uid=-

11:37:14.923 [本地主机启动停止 1] 调试 o.h.p.w.spi.元模型行者 - 访问属性路径 : 时间创建

11:37:14.923 [本地主机启动停止 1] 调试 o.h.p.w.spi.元模型行者 - 访问属性路径 : uuid

11:37:14.923[localhost-startStop-1]DEBUG o . h . p . w . SPI . metamoldelgraphwalker-访问属性路径:版本

11:37:14.923[localhost-start Stop-1]DEBUGo.h.p.w.spi.MetamodelGraphWalker-访问属性路径:描述

11:37:14.923 [本地主机启动停止 1] 调试 o.h.p.w.spi.元模型行者 - 访问属性路径 : in

11:37:14.923[localhost-start Stop-1]DEBUGo.h.p.w.spi.MetamodelGraphWalker-访问属性path: out

11:37:14.923 [本地主机启动停止 1] 调试 o.h.p.w.spi.元模型行者 - 访问属性路径 : 执行由

11:37:14.923[localhost-start Stop-1]DEBUGo.h.p.w.spi.MetamodelGraphWalker-访问属性路径:user

11:37:14.923 [本地主机启动停止 1] 调试

共有2个答案

龚安民
2023-03-14

我在JPA对象中使用了一个变量名,它也是一个SQL关键字

将“in”更改为“money_in”,我的表已创建

逄嘉木
2023-03-14

你试过吗

 类似资料:
  • 我计划用Hibernate5.3创建一个spring boot(版本2)应用程序,但是我在集成Hibernate5时遇到了一些问题。由于它是一个Spring Boot应用程序,容器将自动配置数据源和JPA变体EntityManagerFactory并且我们可以使用unwrap()方法从这个EntityManagerFactory创建Hibernate SessionFactory。 这是我的Hib

  • 本文向大家介绍Spring集成Struts与Hibernate入门详解,包括了Spring集成Struts与Hibernate入门详解的使用技巧和注意事项,需要的朋友参考一下 前言 最近将Spring,Struts,Hiberbate基础已经学习完成。想自己把这三个框架集成一下,然后再写一个后台管理网站练练手。Spring的作用是依赖注入,而Struts是显示层的东西,这两个框架集成后是什么样子。

  • 我是spring和hibernate的新手,我正在尝试从我的spring+hibernate应用程序与mysql数据库连接。但不幸的是,我得到了以下错误。试图修复此问题,但未得到正确的解决方案。 说明服务器遇到意外情况,无法完成请求。 例外情况 org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为org.springfra

  • 环境:Spring 4,Hibernate 4,JPA 如果调用builderdao.delete(实体),我们会在线程“main”org.springframework.dao.invaliddataaccessapiusageException中得到异常:只读模式(flushmode.manual)中不允许写操作:将会话转换为flushmode.commit/auto或从事务定义中删除“rea

  • 组织。springframework。豆。工厂BeanCreationException:创建名为“searchController”的bean时出错:自动连线依赖项的注入失败;嵌套的异常是org。springframework。豆。工厂BeanCreationException:无法自动关联字段:com。辛迪娅。Spring服务学生服务公司。辛迪娅。mvc。搜索控制器。学生服务;嵌套的异常是or

  • 问题内容: 我正在使用最新的稳定Spring版本()。 将Hibernate从5.1升级到5.2,并将依赖项更改为适当的hibernate文档后:https : //github.com/hibernate/hibernate- orm/wiki/Migration-Guide—5.2 我没有收到任何编译错误,但是我的所有测试都因以下堆栈跟踪而失败: 问题答案: 中增加了支持,其稳定版本将于下周推