随笔分类 -  hibernate

1
摘要:现在演示“多:多,双向导航”。由于实际项目中,首先进行数据库设计,所以,从数据库设计推出POJO的设计是很必要的. studentteacher 数据库表: 设计思路: 1.2个POJO类,Teacher对应于t_teacher表。Student对应于t_student表。 2.确定导航要求,为双向导航,使用ManyToMany,一端使用mappedBy。2端都是用cascadeType.ALL... 阅读全文
posted @ 2013-10-20 14:13 FishBird 阅读(518) 评论(0) 推荐(0)
摘要:对于“读”:hibernate的默认设置符合人们使用的习惯。如果要手动控制”读“,可以设置fetch属性。 如果导航起始对象为“多”,读取该对象,hibernate默认将导航终止对象也会读出来。 如果导航起始对象为“1"“,读取该对象,hibernate默认不会将导航终止对象读取出来。可以设置fetch=FetchType.EAGER,一旦是EAGER的,那么在get导航起始对象后,导航终点对象自... 阅读全文
posted @ 2013-10-16 20:35 FishBird 阅读(158) 评论(0) 推荐(0)
摘要:1.crud操作需要放在transaction中。 2.crud的操作对象是“java对象”。 3.crud操作之前,通过导航方向按照setXXX设置属性如果是双向导航,则Client端每个导航方向都有设置setXXXX。(双向导航还有一个规律:一方设置mappedBy。防止外键冗余)有2种方式设置: (1)对导航起始对象和终止对象都执行crud。(多用,一般先操作导航终点对象) (2)通过设置导... 阅读全文
posted @ 2013-10-16 20:13 FishBird 阅读(212) 评论(0) 推荐(0)
摘要:1.数据库中,使用中间表完成多:多关联。 2.类图中,单向导航,在”导航“类中使用@ManyToMany即可。 3.双向导航:分别在导航类中使用@ManyToMany,并选择其中一个使用(mappedBy)或@Transient 单向例子:student和teacher。 需求:student可以找到教他的所有老师。而老师不必找到他教的学生。 Student.java @Entity@Table(... 阅读全文
posted @ 2013-10-15 00:02 FishBird 阅读(227) 评论(0) 推荐(0)
摘要:1.数据库表的映射方式: 在多的一方加外键。 2.类图中字段: 多重性为:1:多 方向性为: 单向导航:“1”这个对象能够找到“多“的对象。所以,在”1“的对象中设置一个属性为集合类型的”多“的对象,在1这类中标明@OneToMany,还要加@joinColumn(name=”groupid”)否则会生成3张表。也可以由”多“一方对象找到”1“一方对象,则包含一个对象即可,在多这个类中标明@Man... 阅读全文
posted @ 2013-10-14 23:03 FishBird 阅读(188) 评论(0) 推荐(0)
摘要:1.通常使用@Id,@IdClass配置注解联合主键。 2.联合主键必须设置主键类。该类必须实现Serializable接口 3.联合主键的映射: 默认:OneToOne:自动为将sql语句的fk对应的设置为主键类中的主键,名称使用默认的。 使用@JoinColumns({。。})来说明fk各个列名。 @OneToOne /*@JoinColumns({ @JoinC... 阅读全文
posted @ 2013-10-09 22:19 FishBird 阅读(145) 评论(0) 推荐(0)
摘要:1.类图中,需要双向导航,意味着Husband可以找到Wife,Wife可以找到Husband。 2.数据库表设计中,无论是查询那个表的信息,都只需要一个外键就可以通过sql搞定。 所以,映射的时候,在Wife类中必须是要增加Husband属性以及getter和setter。如果标记这个“组件”呢? 通过以上的分析,wife表中并不需要husband这个列,因为husband表已经包含了wifeI... 阅读全文
posted @ 2013-10-09 21:50 FishBird 阅读(162) 评论(0) 推荐(0)
摘要:husband与wife 类图:(对象之间的对应) 一个husband对应一个wife,故wife的多重性为1; 一个wife对应一个husband,故husband多重性为1; 现在确定导航性为:Husband可以找到Wife。则在husband类中,包含一个Wife对象即可。 POJO为:Husband.java: @Entitypublic class Husband { priva... 阅读全文
posted @ 2013-09-27 23:27 FishBird 阅读(193) 评论(0) 推荐(0)
摘要:实体Bean的三种状态如下图:判断依据1.bean有无ID2.Session缓存有无bean的ID和Bean的引用组成的map。3.数据库有无Bean。状态转换Teacher t = new Teacher();t.setName("ddd");//t是transient(t没有或有id,session缓存没有t,数据库没有t)session.save(t);//t是persistent(t有id,session缓存有t,数据库有t)session.close()://t是detached(t有id,session缓存没有t,数据库有t) 阅读全文
posted @ 2013-09-24 13:52 FishBird 阅读(339) 评论(0) 推荐(0)
摘要:JTA与JDBC JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中:JDBC连接、JDO PersistenceManager 对象、JMS 队列、JMS 主题、企业JavaBeans(EJB)、一个用J2EE Connector Architecture 规范编译的资源分配... 阅读全文
posted @ 2013-09-24 13:42 FishBird 阅读(181) 评论(0) 推荐(0)
摘要:1. HibernateAPI文档需要单独下载2. ConfigurationA) AnnotationConfigurationB) 进行配置信息的管理C) 用来产生SessionFactory:维护数据库连接池D) 只需关注一个方法即:buildSessionFactory()E) 可以在configure()方法中设置hibernate配置文件。3. SessionFactoryA) 用来产生和管理SessionB) 通常情况下每个应用只需要一个SessionFactoryC) 除非要访问多个数据库的情况D) 关注两个方法即:openSession:创建一个新的session getCu 阅读全文
posted @ 2013-09-23 13:54 FishBird 阅读(184) 评论(0) 推荐(1)
摘要:3种联合主键方法:Annotationi. @Embeddble @Idii. @EmbeddedID(*)iii. @ Id @IdClass(*)第一种@Embeddble @Id主键类:TeacherPk类中包含联合主键id,name.这个类必须实行implements Serializable。import javax.persistence.Embeddable;@Embeddable public class TeacherPk implements Serializable{ private String name; private int id; public... 阅读全文
posted @ 2013-09-23 12:55 FishBird 阅读(231) 评论(0) 推荐(1)
摘要:在@id下面,使用mysql使用:@GeneratedValue(strategy = GenerationType.IDENTITY)数据库自动选择:@GeneratedValue(strategy = GenerationType.AUTO)如果使用Table_Generator则可以跨数据库平台。hibernate建立一个表为多个表提供主键值,这个主键值是integer类型的。它的用法是在实体bean前面定义表的名字,列名,以及记录值。用法,参照马士兵的视频截图如下:@javax.persistence.TableGenerator( name="生成器名", tab 阅读全文
posted @ 2013-09-23 11:18 FishBird 阅读(258) 评论(0) 推荐(1)
摘要:主键值在向数据库中插入的时候,一般不需要从用户那里获得,所以它一般只是标示记录的一个无意义的字段。在向数据库中插入的时候,让数据库自动生成。mysql的自动生成类型为auto_increment,oralce使用sequence。 如果让hibernate自动建表,那么需要设置ID的产生器,以此来得到不同数据库平台的自动生成值得列类型。比如mysql,oracle。还可以通过算法计算,来自动确定数... 阅读全文
posted @ 2013-09-22 18:16 FishBird 阅读(608) 评论(0) 推荐(1)
摘要:enum类型的属性会默认映射为Integer列类型,值自然就是整数。而数据库中不需要存储整数,需要存储字符串的值。比如Color.GREEN在数据库中存储的值是green,而不是定义枚举时,这个元素的序号. hibernate使用 @Enumerated(value=EnumType.STRING)来完成上述功能。这时,对应的列类型就是varchar了。如果使用@Enumerated(value... 阅读全文
posted @ 2013-09-21 17:25 FishBird 阅读(620) 评论(0) 推荐(0)
摘要:在数据库中,表示时间类型的数据有DATE, TIME, 和 TIMESTAMP三种精度(即单纯的日期,时间,或者两者兼备). 可使用@Temporal注解来调整精度.java里面的时间类型为java.util.Date。这个类在hibernate默认转换时,转换为数据库中的timestamp类型。通过@Temporal(TemporalType.DATE/Temporal.TIME/Temporal.TIMESTAMP)来设置数据库中的列具体是什么时间类型的。@Temporal(value = TemporalType.DATE) 阅读全文
posted @ 2013-09-21 16:35 FishBird 阅读(237) 评论(0) 推荐(0)
摘要:基本的映射annotation配置 阅读全文
posted @ 2013-09-20 09:57 FishBird 阅读(584) 评论(0) 推荐(0)
摘要:hbm2ddl.auto自动实现ddl 阅读全文
posted @ 2013-09-18 22:41 FishBird 阅读(191) 评论(0) 推荐(0)
摘要:annotation入门 阅读全文
posted @ 2013-09-17 12:44 FishBird 阅读(237) 评论(0) 推荐(0)
摘要:hibernate入门 阅读全文
posted @ 2013-09-16 20:57 FishBird 阅读(213) 评论(0) 推荐(0)

1