欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate第二次

程序员文章站 2022-03-03 20:02:43
...

改变持久化对象状态的方法save persist
区别:save方法爆粗保存持久化对象时,该方法返回持久化对象的标识属性。Persist 方法 不返回任何值,save 在保存对象时,由于会主动返回记录的主键值,所以会立即将持久化对象对应的数据插入到数据库中,而persist则保证当他在一个事物外部调用时,并不立即转化为insert 语句,这个功能是很有用的,尤其是需要封装一个长回话流程的时候,persist 显得很重要。

根据主键加载持久化实体get load
Sess.load(Class,pk)如果没有匹配的数据记录,则会发生HibernateException 异常;如果在持久化注解中制定了延迟加载策略,则load方法会返回一个未初始化的代理对象。get 与load 方法类似,但是当没有匹配得记录时,会立即访问数据库,并返回null.

更新持久化实体
修改持久化对象最简单的方法是 load 它 然后调用它的setter 方法。从表面上看这种发发在更新持久化实体的时对应2条sql 语句,首先select 然后 update 但是在实际应用中这是正常的,首先就应该加载 记录 把记录发送到view层 供用户修改,之后再保存到数据库。

更新脱管实体
对一个曾经持久化过、但现在已经脱离了session 管理的持久化对象,它被认为处于脱管状态。程序需要显式的应用新的session 来保存这些修改。(update updateOrSave merge)当不确定一个对象是否持久化过,那么调用updateOrSave(),merge方法也可将脱管对象所做的修改,但是与update不同的是merge 不会持久化给定的对象,举例:sess.update(a)后a对象会变成持久化状态,而执行sess.mege(a)代码后,a对象依然不会被关联到session上,a对象依然不会处于持久化状态。而是它返回的a对象的副本会处于持久化状态。

删除持久化实体
可以通过session的delete方法来删除持久化实例;

POJO+持久化注解=PO
另外还可以使用*.hbm.xml 文件的形式使POJO 变为PO.

@Entity被该注解修饰的POJO就是一个实体。该注解时指定一个name属性,name属性指定该实体类的名字,但是大部分无需指定,系统默认以该类的类名作为实体类的名称
@Table 该注解指定持久化类所映射的表。

今天练习了Lob类型的数据存储与获取。
感觉数据源的方法并不怎么好用啊mdzz;
问?如果可以获取一个图片的字节数组,怎么把他转化为图片放在硬盘里?
File file = new File(“”);
OutputStream os = new FileOutputStream(file);
os.write(byte[] b);

另外 感觉对hibernate session的获取方法还是不够理解?
我利用注解的形式写了po,也在*.cfg.xml中mapping 标签中配置了。但是还是会出现 unknown Entity 的错误。经查阅资料,暂时的出如下正确获取方法

Configuration conf = new Configuration().addAnnotatedClass(Student.class).configure();
         ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                 .applySettings(conf.getProperties()).build();

         SessionFactory sf = conf.buildSessionFactory(serviceRegistry);

         Session sess = sf.openSession(); 

主要是加了addAnnotatedClass()(自己的尝试)

 StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                 .configure().build();
                 // 创建会话工厂
                 SessionFactory sessionFactory = new MetadataSources( serviceRegistry ).buildMetadata().buildSessionFactory();
                 // 会话对象
                 Session sess = sessionFactory.openSession();

问如何将一个File转化为字节数组?
File file = new File(“”);
InputStream is = new FileInputStream(file);
byte[] b = new byte[input.available];
is.read(b);

哎 这几天效率 不高啊》》》》》》》》》》》》shit !