`
xiegs2007
  • 浏览: 16176 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Java 实体类的equals() 阻止orderItem保存的问题解决方法

阅读更多
我在做JPA的vote、voteItem试验时,vote中含有Set<VoteItem> items 集合,
首先,申请一个vote:

Vote vote = new Vote();

然后new三个voteItem项:

VoteItem item1 = new VoteItem();
VoteItem item2 = new VoteItem();
VoteItem item3 = new VoteItem();

然后将三个voteItem加入vote的items集合中,
vote.items.add(item1);
vote.items.add(item2);
vote.items.add(item3);

最后,保存:
em.persist(vote)

结果,调试律条出现,而数据库中,只有第一条即voteItem1被保存,其他两个没有保存。

最后查明原因,是VoteItem类生成时,

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
VoteItem other = (VoteItem) obj;
if (id == null) {
if (other.id != null)
return false;
if (other.name.equals(this.name) == false) //就是这里增加代码,因为new时,id == null
return false; //就是这里增加代码,靠name来比较
}
else if (!id.equals(other.id)){
return false;
}
return true;
}

这个函数出了问题,需要加上我写的两行注释,才能将数据保存到库中。
0
0
分享到:
评论

相关推荐

    java实体类生成工具

    Java实体类生成工具是一种高效的开发辅助软件,特别适用于处理大量数据模型对象的场景。在Java开发过程中,我们经常需要创建代表数据库表结构的实体类,这些类通常包含大量的getter、setter、构造函数以及对应的注解...

    实用小工具:Java实体类对比、Json对比、字符串动态拼接等功能

    对比两个实体类,可能涉及到对象的属性比较,例如使用Apache的EqualsBuilder和HashCodeBuilder来实现对象的equals()和hashCode()方法,以确保对象内容一致时返回相同的结果。此外,还可以使用Lombok库的@...

    Java中equals方法隐藏的陷阱

    在Java编程中,正确实现`equals`方法至关重要,它不仅影响对象的比较逻辑,还直接关系到集合类(如`HashSet`、`HashMap`等)的行为。本文将深入探讨Java中`equals`方法的一些常见陷阱,并提供相应的解决方案。 ####...

    2.javaequals()方法.zip

    2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2....

    实体类生成器(C#、Java类)

    C#类通常包含属性(public字段)和构造函数,而Java类可能包含私有字段、getter和setter方法,以及toString()、equals()和hashCode()等实用方法。 5. **输出结果**:最后,生成的代码会被保存为源文件,如.cs文件...

    逆向生成工具,有数据库表生成java bean实体类

    例如,你可以指定实体类的包名、类名前缀、是否生成getter和setter方法、是否生成equals和hashCode方法等。确保正确配置这些信息是成功使用该工具的关键步骤。 执行GeneratorSqlmap中的主方法后,工具会读取配置好...

    Java实体类生成器(源码)

    生成的实体类通常包含属性(对应数据库表的列)、getter和setter方法、以及可能的构造函数和equals、hashCode等方法。 使用Java实体类生成器有以下几个关键知识点: 1. **ORM框架**:实体类在ORM框架中起到桥梁...

    java中的==和equals()方法1

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...

    oracle 表转实体类工具

    这个工具能够自动分析表的字段、数据类型,并生成对应的Java属性,同时还能根据主键和外键关系生成相应的getter和setter方法,以及equals、hashCode和toString等常用方法,极大地减少了手动编写这些代码的工作量。...

    java中equals和==的区别

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,很多开发者容易混淆它们。理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java ...

    解析Java对象的equals()和hashCode()的使用

    深入解析Java对象的equals()和hashCode()的使用 在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个。在多数情况下,这两个函数是不用考虑的,直接使用它们...

    java_equals用法

    java_equals用法,用来熟悉重写equals方法的

    通过枚举反向给实体类赋值

    为了解决这个问题,我们可以创建一个工具类`EnumUtil`,提供一个静态方法来反向根据枚举的描述值赋值: ```java public class EnumUtil { public static &lt;T extends Enum&lt;T&gt;&gt; T getByDescription(Class&lt;T&gt; enum...

    Java语言深入_equals

    这个问题的原因在于`MyTest`类的`equals`方法只比较了`x`字段,而没有考虑`FieldPosition`类的其他属性。这违反了`equals`方法的对称性原则。因此,我们在重写`equals`时,不仅要确保所有相关字段都被正确比较,还要...

    重写equals方法

    在 Java 中,equals 方法是一个非常重要的方法,它用于判断两个对象是否相等,而不是判断两个对象的引用是否相同。在 Object 基类中,equals 方法的实现是使用“==”操作符来比较对象的引用,但是这并不满足实际需求...

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

    Java重写equals同时需要重写hashCode的代码说明

    Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.

    根据数据库生成实体类的一个工具

    实体类,也称为JavaBean,是表示数据库表中的记录的Java对象。它们提供了面向对象的方式来操作数据,使得代码更加清晰、易于理解和维护。`Hibernate`是一个流行的Java ORM(对象关系映射)框架,它允许开发者用Java...

    Java 程序显示 equals() 方法的用法.docx

    这个方法在Java的Object类中定义,并且所有的Java类都默认继承了Object类,因此所有类的对象都可以使用`equals()`方法。`equals()`方法的初衷是检查两个对象的内容是否相等,而不仅仅是它们的引用是否相同。在Java...

Global site tag (gtag.js) - Google Analytics