如果存在类似行,如何避免创建新行?

2024-02-17

我需要配置 hibernate 以避免创建重复的行(尽管该行存在,但它会创建一个新行,并且由于仅设置了一个字段,因此将所有其余行设置为 NULL)

可以说我有一行如下

id des    index age
1  MyName 2     23

虽然我只是将 MyName 设置为 des 并且它已经存在于 Hibernate 的 Name 表中 创建一个新行,如下所示

id des    index age
1  MyName 2     23
2  MyName Null  Null     << new row with null values will be created 
                            rather than updating the previous one

当我想要的时候 。 所以我在我的类中添加了以下注释,但它跨越了实体和动态更新。

@org.hibernate.annotations.Entity(
  dynamicUpdate = true
)

I used @DynamicUpdate同样,虽然 hibernate 接受它,但我仍然遇到同样的问题。

还有其他方法可以做到吗?我的休眠版本如下

<dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>4.2.1.Final</version>
      <type>jar</type>
</dependency>

*根据 Ray 的评论,通过为子类的 Id 分配一个值,它可以正常工作,但是如果我没有 ID 呢?我必须先进行选择才能找到 id 吗?有没有什么方法可以强制 hibernate 根据子类的值自动执行此操作,而不是进行单独的选择来查找 id? *

用户Java

....
import org.hibernate.annotations.DynamicUpdate;

@Entity
@Table(name = "user") 
@DynamicUpdate
public class User implements Serializable {

  private int ID;
  private Name name;
  private String type;

  public User() {
  }

  @Id
  @GeneratedValue
  @Column(name = "id")
  public int getID() {
     return ID;
  }

  public void setID(int ID) {
     this.ID = ID;
  }

  @ManyToOne(cascade = CascadeType.ALL)
  public Name getName() {
     return name;
  }

  public void setName(Name name) {
    this.name = name;
  }

  .....

名称.Java

@Entity()
@Table(name = "Name")
public class Name implements Serializable {

private int id;
private String des;
private String index;
private String age;

public Name() {
}

@Id
@GeneratedValue
@Column(name="id", unique= true, nullable = false)
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

.....

模型.java

public void addMyUsers(){
   Name name = new Name();
   name.setDes("MyName");
   While( ..... )
   {
       User user = new User();
       user.setName(name);
       user.setType(X);
       addUser(user);
   }
}

public void addUser(User user) {
        session = Util.getSession();

        session.beginTransaction();


        session.merge(user); 
        //session.saveOrUpdate(user);

        session.getTransaction().commit();

        session.close();
}

尽管该行存在,但它会创建一个新行

这不太正确。这不仅仅是休眠自动决定创建一个新用户。 Hibernate 正在执行您的代码告诉它的操作:

  • In addMyUsers(),你创造new Name() and new User(),并且您没有给这两者一个预先存在的 ID。您已使这些对象看起来像新对象,而不是要更新的现有对象。
  • In addMyUser(),你打电话给session.merge(user)。 Hibernate 发现这些对象没有 ID - 因此它会合并它们并为它们分配 NEW 状态。当事务刷新并提交时,hibernate 会生成 SQL 来创建新 ID 并将对象存储为新记录。

如果你想确定一个对象是否是预先存在的,并尽可能对之前的记录进行操作:

  1. 获取您想要使用的字段(例如从网络表单) - 在您的情况下,这包括“det”字段。
  2. 查看数据库中是否已存在该记录。使用 hibernate 通过检索对象session.find() or session.get(),在您的情况下使用“det”字段。
  3. 如果找不到该对象,then创建一个新对象。
  4. 对于检索到的对象,您可以选择在修改之前将对象从会话中分离出来(例如通过session.clear())。新创建的对象已经处于分离状态。
  5. 修改对象(设置其字段)。
  6. 如果对象已分离,则通过附加session.merge()。合并适用于预先存在的分离对象(通过检索获得)和新的分离对象(通过new <Object>())。或者,对于预先存在的分离对象,您可以调用session.update()对于新的分离对象,您可以调用session.save()/persist().
  7. 刷新/提交事务。

你失踪了(2)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果存在类似行,如何避免创建新行? 的相关文章

  • 构造hibernate实体时如何处理双向关系?

    我想使用 JPA Hibernate 对两个实体 一个组和一个帐户 之间的关系进行建模 一个帐户可以有多个组 但反之则不然 因此帐户和组之间存在 OneToMany 关系 我的工作同事建议对实体进行建模Account and Group l
  • 使用 Hibernate 防止无限循环数据检索

    我想知道 想象一个场景 例如 POJO public class User private String userName private String name private String surname private List
  • Spring Hibernate中的@Transient方法调用

    我有一个 Pojo 类 在其中创建一个未与数据库表映射的字段 所以我必须声明字段Declaration和setter和getter方法 Transient 否则会显示错误 Transient private String docHistor
  • 如何使用 JSESSIONID 手动加载 Java 会话?

    我有一个处理多部分表单帖子的 servlet 该帖子实际上是由嵌入在页面中的 Flash 文件上传组件制作的 在某些浏览器中 Flash 生成的 POST 不包含 JSESSIONID 这使得我无法在发布期间从会话加载某些信息 Flash
  • 不想保留一对一的实体

    假设我有两节课Employee and Department In Employee我已经写了 OneToOne fetch FetchType EAGER cascade CascadeType ALL JoinColumn name d
  • C3P0:生产中未返回的连接超时?

    参数unreturnedConnectionTimeout给定时间段后未返回的连接超时 我正在尝试决定是否应该在我的制作中使用它persistence xml 使用它的一大优点是连接池将能够从泄漏的连接中恢复 一个很大的缺点是泄漏的连接将很
  • 错误:列“this_.phitorsionangle”必须出现在 GROUP BY 子句中或在聚合函数中使用

    我在执行 sql 查询时遇到了一些问题 我正在使用 Hibernate Criteria 来构建查询 我通过按一定间隔 binSize 舍入值然后对它们进行分组来从数据库创建一些容器 当我直接在 SQL 中使用查询尝试时 效果非常好 SEL
  • 在SPRING BOOT中配置多个数据库

    我正在尝试为我的 Spring Boot 应用程序连接 2 个不同的数据库 但出现此错误 应用程序无法启动 描述 com SyncFibertToolSpring SyncFibertTool MydbDB Config MydbDbCon
  • 如何在 servlet 线程中获取新的有状态会话 bean?

    我正在尝试 EJB3 我想将一个有状态会话 bean 注入到 servlet 中 以便每个访问该 servlet 的用户都会获得一个新的 bean 显然 我不能让 bean 成为 servlet 的实例变量 因为它将被共享 显然不允许注入局
  • Java EE 6 的 Maven 与 Eclipse 项目 Facets

    我在 Eclipse 中使用以下原型创建了 Maven 项目 ejb javaee6 webapp javaee6 这些项目是在没有方面的情况下创建的 将此类 Maven 项目转换为多面形式有意义吗 哪些方面会有帮助 哪些方面可能会给 Ma
  • 无法获取 ConfigBean 中实体的正确 ID - Java EE

    我正在构建一个药房管理应用程序 每个药房都需要一名管理员 约束是这样的 public class Pharmacy implements Serializable Id GeneratedValue strategy GenerationT
  • Spring boot 2+日志详细日志不起作用,配合Logback、Hibernate + Weblogic

    I use 甲骨文11 x 春季启动 2 x maven weblogic 作为外部服务器 入口点 SpringBootConfiguration SpringBootApplication public class WebSpringBo
  • JPA - OneToOne 外键作为主键

    我有一个表 需要其主键作为其他表的外键 因此是单向的一对一关系 每本书只有一个作者 如下所示 Entity public class Author Id String code getters and setters Entity publ
  • JPA Web 应用程序管理策略

    我们目前正在开发一个 J2EE Web 应用程序 使用 JPA 作为我们的数据访问层 我们目前正在研究几种不同的策略来在我们的应用程序中利用缓存 Create an EntityManager per request 在请求范围内获取缓存
  • 为什么要汇集无状态 EJB?

    应用服务器池使用无状态 EJB 的原因是什么 我可以理解 控制传入调用的应用程序工作负载很有用 但这只能证明将作为 FA ADE 与调用者客户端一起提供服务的 EJB 池是合理的 池化内部 EJB 那些未公开且仅在内部调用以执行业务逻辑的
  • Hibernate hbm2ddl.auto=update 不更新 MySQL 中的列定义

    我正在尝试使用 hbm2ddl auto update 更新现有表 多个表中有多个列 其中数据库列定义与实体中的声明发生了变化 喜欢 Column name mycolumn nullable false length 10 private
  • 从一台服务器到多台可配置服务器的 JNDI 查找

    我们在具有不同 IP 的不同机器上有几个 JBoss 服务器 不是集群 而是属于不同客户的单个独立 JBoss 7 1 1 实例 所有系统上都部署了完全相同的 EAR 我们尝试发送一个名为Group从一个系统到另一个系统 问题 我们尝试了一
  • ClientRequestFactory RestEasy 已弃用...还有其他 RestEasy 替代方案吗?

    我需要使用其他人创建的 RestService 的接口来创建轻松的客户端 这工作很好 除了一件事 当我从rest easy 2 3 5 Final更新到resteasy 3 0 x时 Client RequestFactory类看起来像 D
  • 如何使用 mysemma 记录 querydsl 在后台生成的 sql 查询

    任何显示使用 mysemma 的 querydsl 时自动生成的 sql 查询的最佳方式 以便可以轻松查看这些 sql 查询 并且在使用 querydsl 时调试 sql 查询变得容易 例如 from qCustomer where qCu
  • Tomcat 与 Weblogic JNDI 查找

    我们使用的 Weblogic 服务器已配置为允许 JNDI 数据源名称 例如 appds 对于开发 本地主机 我们可能会运行 Tomcat 并且在 server xml 的 部分中声明时 Tomcat 会将 JNDI 数据源挂在 JNDI

随机推荐

  • 如何安装缺少的 Qt 模块?

    如何在 Mac OS 下安装 添加缺少的 Qt 模块 我已经安装并运行了 Qt Creator 但是新项目出现以下错误 Project ERROR Unknown module s in QT charts 我可以直接下载并安装缺少的模块
  • 无服务器 - 部署期间出现“未知对象类型 asyncfunction”错误

    今天早上 我的项目的无服务器部署开始失败 我没有更改代码中的任何内容 上次成功部署是在大约一周前 这是部署日志 Error Error Unknown object type asyncfunction at Object object u
  • 如何在 iOS 中创建包括 Swift 的开发框架?

    我的目标是创建一个包含 Swift 和 Objective C 的 iOS 框架 我可以在我的开发项目中使用它 这个框架的本质是框架本身正在开发中 因此 每次我使用此框架构建项目时 由于缺乏更好的术语 我将使用该框架的项目称为 使用 项目
  • 从 FTP 流式传输文件并让用户同时下载

    我正在创建一个备份系统 其中备份将自动生成 因此我将把备份存储在不同的服务器上 但是当我想下载它们时 我希望链接是一次性链接 这并不难但是 为了确保安全 我正在考虑存储这些文件 以便它们无法通过其他服务器上的 http 访问 所以我要做的是
  • iOS 推送通知声音不来

    我正在开发 Ios 推送通知 我可以在其中获取推送通知 但问题是我在收到推送通知时无法听到任何声音 我还检查了我的通知中心 在那里我已经启用了声音 下面给出了我的代码 请指导我如何解决这个问题 UIApplicationMain class
  • COM 的跨平台替代方案

    我一直着迷于基于组件的编程 无论是使用 COM 另一个系统 还是仅使用纯 C 中的范例 如果一个人通常习惯 传统 OOP 模型 那么它需要一些时间来适应 但这绝对是值得的 它使我的代码更易于维护且更易于扩展 我目前正在进行的项目正在使用范例
  • javascript window.open 从回调

    window open 从主线程调用默认打开新选项卡 但是 这里每次都会打开新窗口 Opera 16 和 Google Chrome 29
  • 我需要在 Oracle 上的外键上创建索引吗?

    我有一张桌子A和一张桌子B A有一个外键B on B的主键 B ID 由于某种原因 我知道有合理的原因 当我在键上连接这两个表时 它没有使用索引 是否需要单独创建索引A B ID或者外键的存在应该提供这一点 外键约束本身并不提供 Oracl
  • 为什么 is_copy_constructible 在 MSVC12 中为 unique_ptr 返回 true

    我本来期望这个静态断言会触发 include
  • 具体QPushButton样式

    如何自定义 QPushButton 或 QToolButton 的外观 使其看起来像elementaryos 的网页 按钮 我真正想要的是特征图像位置和侧面的文字 也许如果我幸运的话我也可以得到这样的边框 但我真的不需要标题下面的小描述 我
  • 如何让这个Javascript函数在IE浏览器中工作?

    此 JAVSCRIPT 功能的目的是防止用户输入任何字母字符 如果用户输入这些字符 光标根本不会移动并停留在同一位置 但是 如果用户输入数字 光标将移动到下一个位置 例如 在此文本字段中 我只允许用户输入数字 此方法在除 IE 8 及更早版
  • Bootstrap 3.1.0 导航栏上的全宽输入组

    我在使用 bootstrap v3 1 0 时遇到了一些问题 我需要获得适合导航栏整个宽度的搜索栏 如下所示 v3 0 3 http bootply com 109727 http bootply com 109727但感觉输入组有一些问题
  • C# 字符串创建(指定长度)

    是否有一种简洁的方法 即不是 for 循环 来创建指定长度的字符串 字符串中的内容并不重要 您可以使用the string构造函数需要一个char and an int http msdn microsoft com en us libra
  • php heredocs 语法中的条件语句?

    我想知道您是否可以在此处文档中包含条件语句 这是我的脚本 但它无法正确解析 username php代码 function doSomething username if isset SESSION u name reply a class
  • AppRegistryNotReady:惰性 format_html()?

    为什么我会收到此异常 Traceback most recent call last File path1 myapp isu myapp isu tests unit views test view isu py line 8 in
  • RxJS 节流行为;立即获取第一个值

    笨蛋示例 https plnkr co edit NZwb3ol8CbZFtSc6Q9zm p preview https plnkr co edit NZwb3ol8CbZFtSc6Q9zm p preview 我知道 RxJS 5 0
  • 我们不能在 forEach 中重新分配数组值吗? [复制]

    这个问题在这里已经有答案了 问题陈述是 我应该用 0 替换 5 以下的任何数字 用 1 替换 5 及以上的任何数字 我试图重新分配值 但它不影响 为什么 function fakeBinary n let numbersArr n spli
  • 计算字符串开头的空格数[重复]

    这个问题在这里已经有答案了 如何计算 C 中字符串开头的空格数量 example this is a string 结果是 4 不知道如何正确执行此操作 Thanks Use Enumerable TakeWhile Char IsWhit
  • 在Android中我们如何复制文件并保留其只读属性?

    在我的 Android 应用程序中 我希望能够复制只读文件并使新版本也只读 在目标文件上使用 setReadOnly 方法只会返回 false 表明失败 当然检查文件本身表明它没有设置只读属性 编辑 正如 David Give 所建议的 这
  • 如果存在类似行,如何避免创建新行?

    我需要配置 hibernate 以避免创建重复的行 尽管该行存在 但它会创建一个新行 并且由于仅设置了一个字段 因此将所有其余行设置为 NULL 可以说我有一行如下 id des index age 1 MyName 2 23 虽然我只是将