iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Hibernate检查id字段的方法是什么
  • 604
分享到

Hibernate检查id字段的方法是什么

2023-06-17 21:06:12 604人浏览 薄情痞子
摘要

这篇文章主要讲解了“Hibernate检查id字段的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate检查id字段的方法是什么”吧!当你想要创建一个将其它域对象保存在

这篇文章主要讲解了“Hibernate检查id字段的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate检查id字段的方法是什么”吧!

当你想要创建一个将其它域对象保存在Set,Map或是List里面的域对象时,这是一个问题。为了解决这个问题,你必须为你的所有对象提供一种equals()和hashCode()的实现,这种实现能够保证在它们在对象保存前后正确工作并且当对象在内存中时(返回值)不会改变。Hibernate参考文档提供了以下的建议:

“不要使用数据库标识符来实现等价的判断,而应该使用商业键值(business key),一种***的,通常不改变的属性的结合体。当一个buk不可序列化对象(transient object)被持久化的时候,数据库标识符会发生改变。当一个不可序列化实例(常常和detached instances在一起)被包含在一个Set里面时,哈希值的改变会破坏Set的从属关系。商业键值的属性并不要求和数据库主键一样稳定,你只要保证当对象在某个Set中时它们的稳定性。

“我们推荐判断商业键值的等价性来实现equals()和hashCode()两个方法。这意味着equals()方法只比较能够区分现实世界中的实例的商业键值(某个候选码)的属性。“(Hibernate 参考文档 v. 3.1.1).

换句话说,equals()和hashCode()使用商业键值进行处理,而对象使用Hibernate生成的键值作为id值。这要求对于每个对象有一个相关的不会改变的商业键值。可是,并不是每个对象类型都有这样的一种键,这时候你可能会尝试使用会改变但不时常改变的字段。这和商业键值不必和数据库主键一样稳定的思想相吻合。当对象在Collection中时候如果这种键不改变,那它们似乎就“足够好”了。这是一种危险的主张,这意味着你的应用程序可能不会崩溃,但是前提是没有人在特定的情况下更新了特定的字段。所以,应当有一种更好的解决方案,而它确实也存在。试图创建和维护在对象和数据库行两者间有着分离的定义的标识符是目前为止讨论的所有问题的根源。如果我们统一所有标识符的形式,这些问题都将不复存在。也就时说,作为以数据库为中心和以对象为中心的标识符的替代品,我们应该创建一种通用的,特定于实体的ID来代表数据实体,这种ID应该在数据***次输入的时候产生。无论一个***数据实体是保存在数据库,是作为对象驻留在内存,还时存贮在其它格式的介质中,这个通用ID都应该可以识别它。通过使用数据实体***次创建时指派的ID,我们可以安全的回到我们对equals()和hashCode()的原始定义。它们只是简单地使用了这个id:

public class Person {   // assign an id as soon as possible   private String id = IdGenerator.createId();   private Integer version;  public String getId() { return id; }   public void setId(String id) {   this.id = id;  }  public Integer getVersion() {  return version;  }  public void setVersion(Integer version) {  this.version = version;  }  // Person-specific fields and behavior here   public boolean equals(Object o) {   if (this == o) return true;   if (o == null || !(o instanceof Person)) return false;   Person other = (Person)o;   if (id == null) return false;   return id.equals(other.getId());   }  public int hashCode() {  if (id != null) {   return id.hashCode();   } else {  return super.hashCode();   }  }  }

这个例子使用id作为equals() 方法判断等价的标准以及hashCode()返回哈希值的来源。这就简单了许多。但是,要让它正常工作,我们需要两样东西。首先,我们需要保证每个对象在被保存之前都有一个id值。在这个例子里,当id变量被声明的时候,它就被指派了一个值。其次,我们需要一种判断这个对象是新生成的还是之前保存过的的手段。在我们最早的例子中,Hibernate检查id字段是否为空来判断对象是否时新生成的。既然我们的对象id永远不为空,这个方法显然不再有效。为了解决这个问题,我们可以很容易的配置Hibernate,让它检查version字段,而不是id字段是否为空。version字段是一个更为恰当的用来判断你的对象是否被保存过的指示器。

下面是我们改进过的Person类的Hibernate映射文件。

<?XML version="1.0"?>  <hibernate-mapping package="my.package">  <class name="Person" table="PERSON">  <id name="id" column="ID">  <generator class="assigned" />  </id>   <version name="version" column="VERSION" unsaved-value="null" />   <!-- Map Person-specific properties here. -->  </class>  </hibernate-mapping>

注意,id下面的generator标签包含了属性class="assigned".这个属性告诉Hibernate我们不是让数据库指派id值而是在我们的代码里面指派id值。Hibernate会简单地认为即使是新的,没有经过保存的对象也有id值。我们也给version标签新增了一个unsaved-value="null"的属性。这个属性告诉Hibernate应该把version值而不是id值为null作为对象是新创建而成的指示器。我们也可以简单的告诉Hibernate把负值作为对象未经保存的指示器,如果你喜欢把version字段的类型设置为int而不是Integer,这将是很有用的。

感谢各位的阅读,以上就是“Hibernate检查id字段的方法是什么”的内容了,经过本文的学习后,相信大家对Hibernate检查id字段的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Hibernate检查id字段的方法是什么

本文链接: https://www.lsjlt.com/news/293313.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Hibernate检查id字段的方法是什么
    这篇文章主要讲解了“Hibernate检查id字段的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate检查id字段的方法是什么”吧!当你想要创建一个将其它域对象保存在...
    99+
    2023-06-17
  • MYSQL插入数据时检查字段值是否重复的方法是什么
    这篇“MYSQL插入数据时检查字段值是否重复的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MYSQL插入数据时检...
    99+
    2023-06-26
  • mongodb查询某个字段的方法是什么
    在 MongoDB 中查询某个字段可以使用以下方法: db.collection.find({fieldName: value}) ...
    99+
    2024-03-08
    mongodb
  • mybatis动态字段查询的方法是什么
    MyBatis提供了动态字段查询的方法,可以根据不同的条件动态选择需要查询的字段。以下是MyBatis中实现动态字段查询的方法:1....
    99+
    2023-09-29
    mybatis
  • jpa查询指定字段的方法是什么
    在JPA中,可以使用以下方法来查询指定字段:1. 使用JPQL查询语句:可以使用SELECT关键字来指定需要查询的字段,例如...
    99+
    2023-09-13
    jpa
  • sql字段拼接查询的方法是什么
    在 SQL 中,可以使用 CONCAT 函数来拼接字段查询。例如,假设有两个字段 first_name 和 last_name,要将...
    99+
    2024-03-04
    sql
  • mysql查询字段不为空的方法是什么
    在MySQL中,可以使用IS NOT NULL来查询字段不为空的记录。 例如,假设我们有一张名为users的表,其中有一个字段ema...
    99+
    2024-03-02
    mysql
  • thinkphp查询指定字段值的方法是什么
    这篇文章主要介绍“thinkphp查询指定字段值的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“thinkphp查询指定字段值的方法是什么”文章能帮助大家解决问题。第一步:连接数据库在使用...
    99+
    2023-07-05
  • mysql多字段模糊查询的方法是什么
    在MySQL中进行多字段模糊查询的方法是使用OR运算符连接多个LIKE条件。 例如,假设有一个名为users的表,其中包含name和...
    99+
    2024-04-09
    mysql
  • mongodb查询字段不为空的方法是什么
    在MongoDB中,可以使用$exists操作符来查询字段不为空的文档。$exists操作符可以与其他查询操作符一起使用,例如$eq...
    99+
    2023-09-12
    mongodb
  • es查询返回指定字段的方法是什么
    在Elasticsearch中,要返回指定字段的方法是使用source过滤器。 source过滤器允许你在搜索请求中指定要返回的字...
    99+
    2023-10-24
    es
  • mongodb对日期字段模糊查询的方法是什么
    在MongoDB中,可以使用正则表达式对日期字段进行模糊查询。具体方法如下所示:1. 使用 `$regex` 操作符配合正则表达式进...
    99+
    2023-09-06
    mongodb
  • sqlserver检查约束的方法是什么
    在 SQL Server 中,可以使用以下两种方法来检查约束: 使用系统存储过程 sp_helpconstraint:这个存储过程...
    99+
    2024-03-06
    sqlserver
  • sqlserver删除字段的方法是什么
    要删除 SQL Server 数据表中的字段,可以使用 ALTER TABLE 语句并指定 DROP COLUMN 关键字,示例如下...
    99+
    2024-03-15
    sqlserver
  • sqlserver拼接字段的方法是什么
    在SQL Server中,可以使用+操作符或CONCAT函数来拼接字段。 使用+操作符拼接字段: SELECT colu...
    99+
    2024-04-09
    sqlserver
  • oracle增加字段的方法是什么
    Oracle增加字段的方法有以下几种: 使用ALTER TABLE语句: ALTER TABLE table_name ADD ...
    99+
    2024-04-09
    oracle
  • json添加字段的方法是什么
    在 JSON 中添加字段有以下几种方法:1. 使用点运算符(.):可以直接通过点运算符将字段添加到 JSON 对象中。例如:```v...
    99+
    2023-08-09
    json
  • oracle字段转换的方法是什么
    在Oracle数据库中,可以使用一些内置的函数来转换字段的数据类型或格式。以下是一些常用的方法: TO_CHAR:将日期、数字等...
    99+
    2024-03-15
    oracle
  • oracle字段拼接的方法是什么
    在Oracle中,可以使用"||"运算符来实现字段拼接。这个运算符可以用于连接两个字符串或者字段,返回一个新的字...
    99+
    2024-04-09
    oracle
  • mysql添加字段的方法是什么
    要在MySQL数据库中添加字段,可以使用ALTER TABLE语句。以下是一个示例: ALTER TABLE table_name ...
    99+
    2024-04-09
    mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作