oracle和hibernate的正向工程和反向工程(详细图解)
来源:互联网 发布:异星工厂0.15 mac版 编辑:程序博客网 时间:2024/06/06 21:38
工具:PL/SQL Developer,数据库oracle,IDE:MyEclipse,JDK7
1. 反向工程:
首先在数据库建立表book和owner:
create table book(bid number(6) primary key,bname varchar(20) not null, -- 书名bprice number(6) not null -- 价格);create table owner(wid number(6) primary key,wname varchar(20) not null, --拥有者wbid number(6) not null -- 书本id);为owner添加外键约束:
alter table owner add constraint fk_bid foreign key (wbid)references book(bid);因为oracle实现id自动增长的时候需要用到序列,所以现在生产两个序列:
create sequence seq_bookminvalue 1 maxvalue 999999999 start with 1 increment by 1 cache 20;create sequence seq_ownerminvalue 1 maxvalue 999999999 start with 1 increment by 1 cache 20;2.在MyEclipse生产Hibernate的模版,
参考博文:oracle和Hibernate的结合 的第3步骤,引入hibernate模版
树结构图如下:
3. 打开视图MyEclipse Database Explorer,
打开方式:Window->Open Perspective->Other->MyEclipse Database Explorer
如果不知道怎么新建oracle.jdbc.driver.OracleDriver,参考博文:oracle和Hibernate的结合 的第2步骤
打开用户SCOTT的TABLE,选中刚生成的book表,右键选中Hibernate Reverse Engineering
参数如下, 在java src folder选中你的项目
勾选Create POJO<>DB Table mapping information,
并选择Add Hibernate mapping annotations to POJO(Hibernate 3.2 and abover)
勾选Update Hibernate configuration with ....
next,选择id生成策略Id Generator,选中sequence,其他不要动,需要动的情况如下:
这边要注意一下!!!
如果你的表有涉及到一对一或者多对多的关联记得勾选相关的选项,否则你还得在实体类里面自己修改注解
一对一关联的,勾选Enable one-to-one detection
多对多关联的,勾选Enable Mayn-to-Many detection
两个都有的用到的,两个都勾选。
如果你不想勾选,想手动在实体类里面自己修改,那也可以。
next, 单击一下Book,
在右边选择Id Generator:sequence,
Class name 可填可不填,不填的话就是类名和表面一致,填了就是自定义类名
最后点击Finish,在弹出的框选择yes。owner表也是这样生成的
这时候你会发现多了两个类和一个xml文件
因为用到了序列,所以这边还有两个地方需要修改一下
book.java类的 @SequenceGenerator,用上刚刚的seq_book序列
@SequenceGenerator(name = "generator",sequenceName="seq_book",allocationSize=1)//修改这条@Id@GeneratedValue(strategy = SEQUENCE, generator = "generator")@Column(name = "BID", unique = true, nullable = false, precision = 22, scale = 0)public BigDecimal getBid() {return this.bid;}Owner.java类的@SequenceGenerator,用上刚刚的seq_owner序列
@SequenceGenerator(name = "generator",sequenceName="seq_owner",allocationSize=1)//修改这条@Id@GeneratedValue(strategy = SEQUENCE, generator = "generator")@Column(name = "WID", unique = true, nullable = false, precision = 22, scale = 0)public BigDecimal getWid() {return this.wid;}因为用到了级联关系的一对多,所以需要添加级联注解@Cascade,否则会报错
@ManyToOne(fetch = FetchType.LAZY)@Cascade(value=CascadeType.SAVE_UPDATE)//新增这条@JoinColumn(name = "WBID", nullable = false)public Book getBook() {return this.book;}生产测试类Test.java,跑完程序你会发现数据库查询之后会多了两条数据
一条在Book表,一条在Owner表
package Test;import org.hibernate.Session;import utils.HibernateSessionFactory;import entity.Book;import entity.Owner;public class test {public static void addOwner(Owner owner){Session session =HibernateSessionFactory.getSession();session.beginTransaction();session.save(owner);session.getTransaction().commit();HibernateSessionFactory.closeSession();System.out.println("add success");}public static void main(String[] args) {Book book = new Book("java",100);Owner owner = new Owner(book,"lwy");addOwner(owner);}}
4.正向工程。
正向工程也很简单,上面的数据都 都不变,在hibernate.cfg.xml中添加一条属性就好了,如下:
create是每次都新建表,改成update是每次都插入数据而不新建表
<property name="show_sql">true</property><property name="format_sql">true</property><property name="hbm2ddl.auto">create</property><!-- 就是这条 --><mapping class="entity.Book" /><mapping class="entity.Owner" /></session-factory>然后把数据库表删了,运行Test.java的时候照样不会报错。
- oracle和hibernate的正向工程和反向工程(详细图解)
- hibernate正向工程和反向工程(图解)
- hibernate 正向和反向工程
- hibernate 正向工程和反向工程
- hibernate 正向工程和反向工程
- hibernate反向工程 (eclipse和myeclipse)
- hibernate反向工程 (eclipse和myeclipse)
- hibernate反向工程 (eclipse和myeclipse)
- 正向工程和逆向工程
- MyEclipse使用hibernate正向工程和逆向工程
- myeclipse使用hibernate正向工程和逆向工程
- myeclipse使用hibernate正向工程和逆向工程
- Hibernate的反向工程
- EA的正向和逆向工程
- 用Rational Rose进行ANSI C++(标准C++)正向和反向工程
- 用Rational Rose进行ANSI C++(标准C++)正向和反向工程
- oracle和Hibernate的结合(详细图解)
- hibernate正向工程连接Oracle数据库的配置文件
- php的Mhash扩展库
- oracle中Blob和Clob类型的区别
- 利用python实现网络爬虫
- js 如何阻止a标签刷新当前页面
- chrome源代码下载
- oracle和hibernate的正向工程和反向工程(详细图解)
- Sublime Text Html插件
- php用户注册对密码进行MD5加密
- 条件,循环和其他语句
- php实现用户注册密码的crypt加密
- JAVA学习(1)
- golang使用二叉树实现排序
- 实现一个 Swiper
- 字体问题记录