Hibernate @Version 注释

2023-12-05

hibernate @version 和 ManyToOne Mapping 之间的关系是什么?

假设我有两个表“部门”和“员工”。这是部门是主表 和明细表中的员工。在 Employee 表中,部门 ID 作为外键引用。

这是我的课程

Public class Department {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long ID;
    @Version
    private Long version;

    //Getters and Setters

}

public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long ID;
    @Version
    private Long version;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "departmentID" )
    private Department department;

}

而且,Spring 处理会话。因此,假设在一页中获取并存储了特定部门 在 HTTP 会话中。

现在在另一个页面中,我正在尝试执行以下操作

Employee emp = new Employee();
emp.setName('Test')
emp.setDepartment(dept) // already stored in the HTTP session variable
service.save(emp)

现在我收到以下异常

org.springframework.dao.InvalidDataAccessApiUsageException: object references an unsaved transient instance - save the transient instance before flushing: 

只需进行如下一处更改即可出现错误

Employee emp = new Employee();
emp.setName('Test')
dept.setVersion(0);
emp.setDepartment(dept) // already stored in the HTTP session variable
service.save(emp)

我的 Spring 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/tx
               http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<!-- Container Configuration: The IOC container configuration xml file is 
    shown below,The container has the <context:component-scan> element and <context:annotation-config/> 
    <context:annotation-config/> used to intimate the beans of this IOC container 
    are annotation supported. By pass the base path of the beans as the value 
    of the base-package attribute of context:component-scan element, we can detect 
    the beans and registering their bean definitions automatically without lots 
    of overhead. The value of base-package attribute is fully qualified package 
    name of the bean classes. We can pass more than one package names by comma 
    separated -->

<context:annotation-config />
<context:component-scan base-package="com.product.business" />

<tx:annotation-driven transaction-manager="transactionManager" />

<!-- This will ensure that hibernate or jpa exceptions are automatically 
    translated into Spring's generic DataAccessException hierarchy for those 
    classes annotated with Repository -->

<bean
    class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />

<bean id="CRUDService" class="com.product.business.service.CRUDServiceImpl" />
<bean id="AuthService" class="com.product.business.service.AuthServiceImpl" />

服务实施

package com.product.business.service;

import java.io.Serializable;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.product.business.dao.CRUDDao;

@Service
public class CRUDServiceImpl implements CRUDService {

    @Autowired
    private CRUDDao CRUDDao;

    @Transactional(readOnly = true)
    public <T> List<T> getAll(Class<T> klass) {
        return CRUDDao.getAll(klass);
    }

    @Transactional
    public <T> void Save(T klass) throws DataAccessException {
        CRUDDao.Save(klass);
    }

    @Transactional
    public <T> void delete(T klass) throws DataAccessException {
        CRUDDao.delete(klass);
    }

    @Transactional
    public <T> T GetUniqueEntityByNamedQuery(String query, Object... params) {
        return CRUDDao.GetUniqueEntityByNamedQuery(query, params);
    }

    @Transactional
    public <T> List<T> GetListByNamedQuery(String query, Object... params) {
        return CRUDDao.GetListByNamedQuery(query, params);
    }

    @Override
    @Transactional(readOnly = true)
    public <T> Long getQueryCount(String query, Object... params) {
        return CRUDDao.getQueryCount(query, params);
    }

    @Override
    @Transactional(readOnly = true)
    public <T> T findByPrimaryKey(Class<T> klass, Serializable id) {
         return CRUDDao.findByPrimaryKey(klass, id);
    }

}

您需要先保存Department在保存之前Employee.

service.save(dept);
service.save(emp);

UPDATE回复您的评论:

为了将员工与部门关联起来,您需要有一个存在的部门。请记住,在您的数据库中,员工对部门有 FK,因此 Hibernate 抱怨的是您试图保存部门不存在的员工,因此您有以下选择:

  1. 如果部门是新部门,则必须先保存它,然后再保存员工。
  2. 通过查询(例如entityManager.find(id, Department.class))查找已存储的部门,并在 Employee 对象中使用该对象。
  3. Mark as @Cascade您与员工中的部门的关系。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate @Version 注释 的相关文章

  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Hibernate 挂起或引发延迟初始化,没有会话或会话已关闭

    我正在增强旧的 Spring Hibernate 应用程序 但我陷入困境 我有一种方法可以读取 3000 多行长的文件 每行都有一条记录 必须与数据库中的某些内容进行比较 然后必须将寄存器添加到数据库 多对多表 表和关系是 Branch h
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • 如何升级 Hibernate 4.3 --> 5.2?

    我用 Google 搜索了一下 但没有看到任何将 Hibernate 升级到 5 2 的教程 我唯一能找到的是 http hibernate org search documentation migrate 5 0 http hiberna
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • Opencv Java 灰度

    我编写了以下程序 尝试从彩色转换为灰度 Mat newImage Imgcodecs imread q1 jpg Mat image new Mat new Size newImage cols newImage rows CvType C
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • 如何使用OpenCV2.0和Python2.6调整图像大小

    我想使用OpenCV2 0和Python2 6来显示调整大小的图像 我使用并采用了this示例 但不幸的是 此代码适用于 OpenCV2 1 似乎不适用于 2 0 这是我的代码 import os glob import cv ulpath
  • 如何在 jQuery 中使用 dataType 'text' 进行跨域 ajax?

    在我的 javascript 函数中 我称之为 ajax 它工作正常 但只有当我访问网页时firebird服务器 我的电脑上有相同的代码testing服务器 ajax 要求下载一些文件 但只有 firebird 服务器有其 ip 向我们的客
  • 在unix下同步四个shell脚本依次运行

    我有 4 个 shell 脚本来生成一个文件 假设是 param txt 该文件由另一个工具 informatica 使用 并且当该工具完成处理时 它会删除 param txt 这里的目的是所有四个脚本都可以在不同的时间调用 比如上午 12
  • 注意:PHP 中未初始化的字符串偏移量

    嗨 我有这个函数 它返回一个通知 注意 未初始化的字符串偏移量 function generaterandomkey length string characters 0123456789abcdef for p 0 p lt length
  • 如何创建右上角带有完成按钮的 UIKeyboard?

    我需要展示UIKeyboard右上角有 完成 按钮 请查看附图 任何帮助将不胜感激 这可能对你有帮助 请检查一下BS键盘控制
  • C# 自定义组合框排序

    是否可以在组合框中自定义排序 显示顺序 假设我在所有其他值之前想要一个特殊值 MasterValue 不要添加字符串 而是创建一个实现 IComparable 并重写 ToString 的类 将该类的实例添加到您的 ComboBox
  • 将 SMS api 与 woocommerce 集成,不发送消息

    我正在将 SMS API 与 WooCommerce 集成 以便每当在现场进行任何购买时都会向客户的手机发送自动订单更新 下面是我的代码 add action woocommerce payment complete custom proc
  • 如何使用宏将数字格式化为文件名中至少有 5 位数字?

    我正在开发一个宏 其中涉及生成文件名并将 Excel 工作表保存为具有该名称的 pdf 我能够生成目标文件夹名称 如下所示 user name Environ UserName file dir C Users user name Docu
  • 为什么 JSON.parse 会因空字符串而失败? [复制]

    这个问题在这里已经有答案了 为什么 JSON parse 产生错误 Uncaught SyntaxError Unexpected end of input 如果直接返回不是更符合逻辑吗null 编辑 这不是链接问题的重复 虽然最小有效 j
  • Perl 正则表达式:剪切和粘贴

    我正在尝试使用 perl 编辑文件 本质上是剪切和粘贴文件中的内容 但是 看来我错误地构建了正则表达式 我很乐意帮助解决它 替换命令shouldcut 剪切之后的内容export PATH PATH直到但是not包括 THIS IS LAS
  • R - 多个嵌套循环

    我正在尝试编写一个嵌套循环代码来模拟 101 行数据框中的 10 列数据 第一行数据已被指定为起始值 每列应该不同 因为我的矩阵 r 是从随机法线生成的 但是 每列中的结果值完全相同 为循环索引提供一些上下文 tmax 100 ncol p
  • 在 Windows 8 上使用 gem 安装 SASS

    我尝试在 Windows 8 x64 上安装 SASS 但即使防火墙已关闭 仍然出现错误 我发出这个命令 C Ruby200 x64 bin gt gem install sass or C Ruby200 x64 bin gt ruby
  • Bootstrap 滑动选项卡(不是选项卡内容)

    我正在开发一个项目并使用 Bootstrap Tabs 作为我的选项卡 用户可以创建新选项卡 因此问题是 超过N选项卡 其中N取决于浏览器的宽度 导致此行为 我浏览了一下 Bootstrap HTML 选项卡代码 选项卡是li里面的元素ul
  • 如何获取客户端的计算机名称

    我在另一篇文章中看到了这个问题 但解决方案无法正常工作 我用 System Net Dns GetHostEntry HttpContext Current Request ServerVariables Item REMOTE HOST
  • 在 Tkinter 中向按钮添加图像

    我正在尝试将图像添加到按钮 但是当我尝试执行当前代码时遇到一些问题 它所显示的只是一张没有文字的图像 我也看不到按钮 有什么方法可以修复我当前的代码吗 from tkinter import import tkinter as tk roo
  • 发送意图的进程的 Pid

    我正在尝试发现向我发送意图的进程的进程 ID 或包名称 我不想将进程 ID 或包名称放在额外的内容中 正如其他一些问题所要求的那样 因为我不想允许欺骗 我使用的代码是 Override public void onCreate Bundle
  • 为什么session[:]在grape-rails中不起作用?

    我使用 Rails 和 Grape 作为 API 我只是好奇为什么没有session something 葡萄的方法 我可以创建 cookie 但也无法创建签名 cookie 它给我一个错误 Grape 是一个用于构建 API 的轻量级框架
  • 主屏幕网络应用程序的 Facebook 身份验证已损坏!+

    使用元名称 apple mobile web app capable 内容 yes 删除所有移动 safari ui 时 Facebook connect js js api 无法与主屏幕 web 应用程序一起使用 经过身份验证后 我会看到
  • 从活动之外的类启动意图

    我有两项活动 其中一项称为MyActivity 我希望他们都能够使用位于我们可以调用的类中的函数MyClass In MyClass 我尝试使用意图来启动活动AnotherActivity 由于构造函数采用上下文作为参数 因此我只是尝试在构
  • Hibernate @Version 注释

    hibernate version 和 ManyToOne Mapping 之间的关系是什么 假设我有两个表 部门 和 员工 这是部门是主表 和明细表中的员工 在 Employee 表中 部门 ID 作为外键引用 这是我的课程 Public