`

hibernate一对一关系中知道维护端主键去更新被维护端部分字段数据

阅读更多

下面举的例子不是我项目中的真实例子,但是从我的项目简化出来的一个模型。

User(id, name, cardId)用户

Card(id, money)用户的卡信息

public class User {
      private String id;
      private String name;
      private Card card;
      //还有其他很多属性
      //省略了get和set方法
}

 

public class Card {
      private int id;
      private float money;
      private User user;
      //还有其他很多属性
      //省略get和set方法
}

 

User和Card的设置是一对一双向关系的,然后User是维护端,由于考虑到面向对象,所以没有把用户的Card的信息保存到User中,而是分成两个实体类进行编写。现在有一个需求:知道员工的id,要更新其Card里面的money,如果一般情况下,是可以按下面写代码的

User user = userService.find(userId);  //根据userid找到具体的User信息
Card card = user.getCard();
card.setMoney(money);  //设置新的数据
cardService.update(card);  //保存到数据库中

 

好了,一般很多人会按上面的代码进行编写,但上面的效率太低了,只修改了一个数据,就要把整个User和Card的全部信息都拿了出来,于是就可能用HQL来进行操作,如下:

Query query = session.createQuery("update Card c set c.money=? where c.user.id=?");
query.setParameter(0, 100f).setParameter(1, 1);
query.executeUpdate();

 上面的代码,被Hibernate解释成了如下的代码

 update
        card,  
    set
        money=? 
    where
        id=?

 card后面居然多了一个“,”,并且where后面的字句也不正确,我怀疑这应该是一个bug吧,但没办法,问题总是要解决的,但又不想用上面说的第一种方式,效率不高,难道要具体的数据库编写sql代码,这样兼容性不好,还是用hql语句实现好了,于是写出了下面一段代码:

Query query = session.createQuery("update Card c set c.name=? where c.id = (select u.card.id from User u where u.id=?)");
query.setParameter(0, 100f).setParameter(1, 1);
query.executeUpdate();

 

这下终于可以了!酷

 

分享到:
评论

相关推荐

    hibernate使用主键关联的一对一关系

    总之,理解并正确实现Hibernate中的一对一主键关联对于优化数据模型和提高代码的可维护性至关重要。通过共享主键,我们可以确保数据的完整性和一致性,同时简化对象之间的交互。阅读提供的博客资源,结合本文的讲解...

    Hibernate Annotation 共享主键一对一双向关联

    在一对一的关联关系中,如果两个实体共享同一个主键,那么这种关联被称为共享主键的一对一关联。这意味着这两个实体的表在数据库中通过主键进行连接,一个实体的主键同时也作为另一个实体的外键。 在Hibernate中,...

    hibernate一对一关联关系

    以上就是关于Hibernate一对一关联关系的详细解释,通过理解和掌握这些知识点,你可以更有效地在Java项目中设计和实现数据库模型,提高代码的可读性和维护性。希望这份资源能帮助你更好地理解和运用Hibernate框架。

    hibernate一对一主键关联映射(单项关联)

    本篇将深入探讨在Hibernate中实现一对一主键关联映射的单项关联方式。这种关联意味着两个实体类共享相同的主键,即一个实体类的一个实例对应另一个实体类的唯一实例。 首先,我们要明确一对一主键关联映射的基本...

    Hibernate教程07_关系映射之一对一双向主键关联

    在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一双向主键关联”。这种关联类型是数据库设计中的常见模式,它允许两个实体类之间通过共享相同的主键来建立关联。在Java应用中,...

    Hibernate一对一主键映射

    在这个实例中,我们将深入探讨Hibernate一对一主键映射的概念、配置以及如何通过源代码和测试程序进行实践。 1. **一对一关系理解**: 一对一关系指的是一个实体类中的记录对应另一个实体类中的唯一一条记录。例如...

    Hibernate一对一主键关联映射(双向关联)

    标题"Hibernate一对一主键关联映射(双向关联)"中的"主键关联"指的是两个实体通过共享相同的主键来建立关联。"双向关联"则意味着在两个实体类中,都可以直接访问到对方的实例,即在实体A中有一个对实体B的引用,...

    hibernate 双向一对一基于主键的关联映射

    在Java持久化框架Hibernate中,双向一对一(OneToOne)基于主键的关联映射是一种常见的对象关系映射(ORM)技术。这种映射方式允许两个实体类之间建立一对一的关联,且关联是通过主键来实现的。接下来,我们将深入...

    hibernate一对一主键关联映射(双项关联)

    在Java的持久化框架...总结来说,Hibernate的一对一主键关联映射,尤其是双向关联,能有效地简化对象关系的映射,提高代码的可读性和维护性。然而,需要根据实际情况权衡其带来的性能影响,确保系统设计的高效性。

    Hibernate教程06_关系映射之一对一单向主键关联

    这个文件名可能代表了一个基于Struts2、Spring和Hibernate(S2SH)的项目,其中"relation03"可能表示关系映射的第三部分,而"one2one_uni_pk"直指一对一单向主键关联的具体实现。 **详细知识点:** 1. **一对一...

    Hibernate学习要点_one2one 一对一主键双线关联

    在深入探讨Hibernate中的一对一(One-to-One)主键双线关联机制之前,我们首先需要理解几个核心概念:Hibernate框架、实体关系映射以及主键关联的基本原理。Hibernate是Java平台下的一款开源对象关系映射(ORM)框架...

    Hibernate一对多使用非主键关联设置

    通过这种方式,我们就可以在Hibernate中设置一对多非主键关联,使得在操作部门和员工数据时,能够方便地维护它们之间的关系。这种方法允许我们在不违反数据库设计原则的情况下,灵活地处理实体之间的关联。同时,非...

    hibernate 主键一对一映射(单向) 实例(java类)

    通过以上步骤,我们就可以在Hibernate中实现单向一对一主键映射。这个实例中的`hibernate_fifth_one2one_pk_1`文件可能包含了相关的代码示例或测试用例,供你参考和学习。理解并掌握一对一映射是提高Hibernate使用...

    Hibernate一对一主键关联映射(单向关联)

    总结来说,Hibernate中的一对一主键关联映射允许两个实体共享同一个主键,实现单向关联时只需在依赖方添加对另一方的引用。在实际应用中,应根据业务需求谨慎选择关联类型,以确保数据的完整性和一致性。

    hibernate一对一外键关系

    在Hibernate中,实现一对一外键关系有几种方式,包括使用主键关联(Primary Key Association)和使用外键关联(Foreign Key Association)。我们首先来看主键关联: 1. **主键关联**:在这种模式下,一方实体的主键...

    hibernate一对一主键关联代码实现

    在Hibernate中,实现一对一主键关联有以下几种方式: 1. **共享主键关联**: 这种方式下,两个实体共用同一个主键。例如,我们可以创建两个实体类:`Person` 和 `Passport`,`Person` 的ID也是 `Passport` 的ID。...

    Hibernate 一对一关联映射(主键关联VS唯一外键关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系数据库模型。这篇文章将深入探讨两种主要的一对一关联映射方式:主键关联(Primary Key Join)和唯一外键关联(Foreign Key Join)。我们...

    hibernate一对一实例

    在这个“hibernate一对一实例”中,我们将深入探讨如何在Hibernate中实现一对一的映射,并通过具体的代码示例来帮助理解。 一、一对一关联的概念 一对一关联意味着一个实体只与另一个实体的一个实例相关联,反之...

    hibernate联合主键全攻略

    在Java端,我们需要创建一个对应于联合主键的实体类,如`UsersPK`,通常会包含与`<composite-id>`中定义的字段相对应的属性和getter/setter方法。例如: ```java public class UsersPK implements Serializable { ...

    hibernate一对一主键关联(注解版)

    本知识点主要讲解的是使用Hibernate实现一对一主键关联(Primary Key Join)的方式,通过注解进行配置。 一对一的关联在数据库设计中并不常见,但当两个实体之间确实存在一对一的关系时,如用户和其个人资料,这种...

Global site tag (gtag.js) - Google Analytics