(起个标题很头疼……表达能力相当差)
http://www.iteye.com/post/47540
看了上面的那个帖子后,我觉得有必要区分。
分析了一下,帖子里说ID作为主键会出问题主要是在用到Set的情况下(也就是一对多或者多对多),比如说某用户保存了两个新建的email。
......
User user = session.load(User.class,new Integer(1));
Email e1 = new Email();
Email e2 = new Email();
e1.setAddress("xxx@xx.com");
e2.setAddress("yyy@yy.com");
user.getEmails().add(e1);//这时候id为null,即使equals方法里逻辑是“id为空则返回false”
user.getEmails().add(e2);//hashcode值又该如何计算?所以这时候eq/hc方法要用业务关键属性来写
session.save(user);
.....
但业务键值比对的方法有时候好像又不适用
举个例子吧:
一对一的情况。现在有两个表,用户表和用户联系方式表,用户表作为主表,联系方式表的主键作为外键与用户表关联。联系方式表除了主键其余字段都可为空,这时候如果用“值比对”的方式写eq/hc,很有可能逻辑上应该不相等的两个对象equals的结果是true(比如说两个不同对象的所有属性值都为空),得到的hashcode也是一样的。这时候为了避免这个问题,eq/hc方法可以用id来写。因为是一对一的关系,用不到Set,所以也不会产生上面提到的问题。
总结了一下,就是:
1、不改写eq/hc,在跨session操作时会出现问题;
2、一对多或者多对多关系中,pojo的eq/hc不能用id来写,而应该用业务关键属性来写;
3、一对一关系中,pojo的eq/hc可以用id来写,如果用属性值比对反而有可能出问题。
以上只是个人观点,不知道对不对。
分享到:
相关推荐
dao和mapper 抛弃了mybatis插件生成的一个POJO一个mapper 很冗余的数据,这里直接生成增删改查3个dao/mapper对照,依托于IDEA-DataBase-Tools能够直接选取需要生成POJOS 表模型的选择器。可以很方便的生成pojo/dao/...
参照https://github.com/joelittlejohn/jsonschema2pojo/wiki/Getting-Started的步骤Using jsonschema2pojo within your Java project (embedded)
- 关联关系:如果有外键关联,POJO类可能需要包含对其他POJO类的引用,或者使用集合来表示一对多或多对多的关系。 5. **ORM框架中的POJO应用** - Hibernate:在Hibernate中,POJO作为持久化对象,通过注解或XML...
注意,这个方法只处理当前类的字段,如果Pojo类中有嵌套的其他Pojo对象,它们不会被自动展开。若要处理嵌套的Pojo,你需要递归调用`pojoToMap`方法。 现在我们可以创建一个User对象并将其转换为Map: ```java User...
Mybatis是一款广受欢迎的Java持久层框架,它简化了数据库操作与对象模型之间的映射,提供了灵活的SQL映射和基于XML或注解的配置方式。在开发过程中,经常需要手动创建POJO(Plain Old Java Object)类来作为数据表的...
POJO没有特定的框架依赖,它仅仅是一个具有属性及对应的getter和setter方法的普通Java类。POJO在许多场景下都非常有用,比如在网络传输中作为数据载体,在持久化层与业务逻辑层之间作为数据传输对象等。 #### 二、...
例如,假设有一个用户表,包含id、username和password三个字段,我们可以创建如下的POJO类: ```java public class User { private Long id; private String username; private String password; // getters ...
- 例如,创建一个名为`SimpleService`的类,包含`getGreeting`和`getPrice`两个公共方法,编译后将`.class`文件放入特定的目录(如`安装目录>webapps/axis2/WEB-INF/pojo`)。 - 无需额外的配置文件,Axis2会自动...
一个典型的POJO类通常只包含属性以及相应的getter和setter方法,但并不限制其实现业务逻辑或其他功能。 **JavaBean**,是一种遵循特定规范的Java类,最初由Sun Microsystems(现在是Oracle的一部分)提出,旨在用于...
《POJO In Action》是一本深入探讨Plain Old Java Object(POJO)概念和技术的书籍,其核心在于如何在Java开发中有效地使用简单、无框架依赖的对象。POJOs是Java编程中最基本的元素,它们代表了纯粹的面向对象设计,...
2. **访问器和修改器**:每个属性都有对应的getter和setter方法,以便于其他层(如Service和Controller)读取和修改这些属性的值。 3. **序列化**:为了使POJO类能够在网络间传输,或者持久化到文件或内存中,它们...
POJO的主要特征是拥有私有属性和对应的getter/setter方法,用于封装数据,类似于数据传输对象(DTO)或值对象。POJO不包含业务逻辑或持久化逻辑,其主要作用是在不同的层级之间传递数据。在使用Hibernate框架时,...
根据属性名相同, 把一个pojo的属性值付给另一个pojo相同属性名.
对于复杂的数据库设计,如包含外键关联的表,生成器可能还会生成对应的关联对象,比如一对多、多对一、多对多关系。在处理这类关系时,生成器会生成对应的List、Set或单个对象引用,以满足Java对象模型的构建。 在...
5. **@OneToMany**,**@ManyToOne**,**@OneToOne**和**@ManyToMany**注解:这些注解用于处理实体之间的关联关系,如一对一、一对多、多对一和多对多关系。例如,用户和角色的关系可能是多对多: ```java @Entity...
默认情况下,如果Action返回一个字符串,Struts2会寻找匹配该字符串的结果类型配置,比如“success”可以对应到一个JSP页面。这种设计使得Action的返回值更语义化,降低了代码的耦合度。 4. **拦截器(Interceptors...
POJO是指没有特定框架约束的普通Java对象,它提供了一种简单的方法来封装数据和行为。在Web服务上下文中,POJO可以被直接映射为服务的输入和输出参数,使得服务接口更直观、更易于理解。 在AXIS2中,我们可以直接将...
写好配置后,连接数据库,读取所有表,自动生成pojo和mybatis xml增删改查字段信息。剩下的工作就是复制-粘贴-修改。生成的pojo里面只有成员变量没有set/get方法,因为生成代码麻烦但是在eclipse里面添加这个很简单...
- **定义**:BO 表示业务对象,封装了一组业务逻辑或操作,通常包含业务规则和方法。 - **应用场景**: - 复杂业务流程的管理。 - 将多个PO或DO组合在一起形成一个更高级别的业务单元。 - **优势**: - 支持复杂...
- 对于多对一或一对多关系,可能使用 `@ManyToOne` 或 `@OneToMany` 等注解。 - 对于一对一关系,可能使用 `@OneToOne` 注解。 - 对于外键关联,可能使用 `@JoinColumn` 注解。 理解并掌握 Hibernate 反向工程的...