java 对象数据映射_Hibernate中实体对象与数据的映射方式

102127089_612ffcc5ab.jpg?v=0

1Entity's relation

1.1One to One

一个对象的一个实例对应另一个对象的一个实例从数据库角度描述,一个表中的一条记录对应另外一个表中唯一一条记录

public class Image{

private Long id;

private String imgName;

private Blog value; //to store binary of image

......

}

Image.hbm.xml

public class Product{

private Long id;

private String name;

private double price;

private Image photo;

}

1.2Many to One

一个对象对应另一个对象的多个实例,从数据库角度描述,是在一个数据表中的一条记录对应另外一个数据表中对条记录.

public class PersonalCompute{

private Long computerId;

private String cpu;

......

private Programmer owner;

}

1.3One to Many

The same example as Many to One.But we stand at Programmer class's view point.

public class Programmer{

...

private Set computers = new HashSet();

}

2Collection

2.1Map

...

showcase:

Team team1 = new Team();

team1.setName(xx);

team1.getMembers.put("index","content");

......

sess.save...

2.1.1many-to-any

2.1.2One to many

单单使用Map做存储往往无法表达复杂的对象,如果要讲对象map进行映射:

One Team,multi-members

Public class Member{

...

private Team team;

}

...

showcase:

Team team = new Team();

team.setName("xx");

Member mem1 = new Member();

mem1.setXX

mem1.setXX

Member mem2 = new Member();

mem2.setXX

mem2.setXX

team.getMembers().put("xx",mem1);

team.getMembers().put("xx2",mem2);

2.1.3many to many

teamRole is their common key of Map.

Team

id

name

2

team2

Member

di

name

age

1

davy

23

memberAtTeams

member

team

teamRole

1

2

coach

teamHasMembers

team

member

teamRole

2

1

coach

2.1.4Composite-index

复杂Index可以是一个类。public class Position{

private String role;

private String scene;

public Position()....

getter...

setter...

}

...

index-many-to-one

index-many-to-many

index-many-to-any

2.1.5composite-element

2.2Set

<..>

2.2.1one-to-many

2.2.2many-to-many

2.2.3many-to-any

2.2.4composite-element

2.3List

2.3.1one-to-many

2.3.2many-to-many

2.3.3many-to-many

2.3.4composite-element

2.4Bag

It can contains JDK's Collection and List interface type's object.

2.5idBag

与bag相比多出了collection-id属性

2.6array

public class Team{

//...

private String[] members;

}

3Component

Public class Country{

//..

private Position position;

}

3.1One-to-one

3.2many-to-one

3.3dynamic-component

4Dynamic class

4.1One-to-one

4.2many-to-one

5Mapping type

5.1Java type to SQL type

5.23.0 enmu

5.3user defined data type

need implements org.hibernate.usertype.CompositeUserType or org.hibernate.usertype.UserType interface.

6Class Hierarchy's mapping

6.1Subclasses are saved in on Table

6.1.1discriminator

Sapmle:

Class AbstractParent{

String id;

/*important*/

String discriminator

}

Class ChildA{

String childA;

}

Class ChildB{

String childB;

}

=========DB=========

colum name

data type

memo

id

varchar

childA

varchar

childB

varchar

class_type

varchar

used to identify subclass:A B

========mapping config file====

id generator

·increment

·identity

·sequence

·hilo

·seqhilo

·uuid

·guid

·native

·assigned

·foreign

composite id

6.2Subclasses are saved in separated Table

并不为父类Container建立映射文件Box与Bottle的映射文件也如没有关系一样普通的建立但是对Container取得操作List pcs = sess.createQuery("from com.be.david.Container").list();

if(!cs.isEmpty()){

...

}会将Box与Container数据都取出来这是Hibernate默认隐式完成的

6.3Parent Class and Subclasses are saved in separated Table

6.4One PO multi-table

public Class Person{public String id;public String name;public String sex;public String address;public String city;public String zipcode;}

we wanna save address related attributes(blue ones).Use join

...

6.5Class A Class B not inherited from Parent Class

6.5.1subselect

We can use subselctto make ChildA and ChildB standalone.So how can we get all data including ChindA and ChildB?

select * from ChildAunionselect * from ChildB

posted on 2006-02-22 20:14 Vincent.Chen 阅读(399) 评论(0)  编辑  收藏 所属分类: Hibernate

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值