玩火请打119吧 关注:2贴子:140

javaEE 技术总结

只看楼主收藏回复

一楼度娘


1楼2014-02-19 10:46回复
    jaxb框架技术详细介绍 http://www.cnblogs.com/holbrook/archive/2012/12/15/2818833.html


    2楼2014-02-19 10:48
    回复
      2025-05-28 04:53:56
      广告
      hibernate 的 CascadeType 属性
      CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的数据是实时的,在用实体中的数据之前就可以调用一下refresh()方法!
      CascadeType.REMOVE:级联删除,当调用remove()方法删除Order实体时会先级联删除OrderItem的相关数据!
      CascadeType.MERGE:级联更新,当调用了Merge()方法,如果Order中的数据改变了会相应的更新OrderItem中的数据,
      CascadeType.ALL:包含以上所有级联属性。
      (注:以上几种级联操作,只能实在满足数据库的约束时才能生效,比如上边的Order和OrderItem存在主外键关联所以执行REMOVE()方法时是不能实现级联删除的)
      CascadeType.PERSIST:级联保存,当调用了Persist() 方法,会级联保存相应的数据


      3楼2014-02-19 10:51
      回复
        Hibernate配置实体类为什么要添加java.io.Serializable 接口
        序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
        序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
        是对象永久化的一种机制。
           确切的说应该是对象的序列化,一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失,但如果我们想把某些对象(因为是对象,所以有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以在程序再次运行时读取这些对象的值,或者在其他程序中利用这些保存下来的对象。这种情况下就要用到对象的序列化。
           只有序列化的对象才可以存储在存储设备上。为了对象的序列化而需要继承的接口也只是一个象征性的接口而已,也就是说继承这个接口说明这个对象可以被序列化了,没有其他的目的。之所以需要对象序列化,是因为有时候对象需要在网络上传输,传输的时候需要这种序列化处理,从服务器硬盘上把序列化的对象取出,然后通过网络传到客户端,再由客户端把序列化的对象读入内存,执行相应的处理。
           对象序列化是java的一个特征,通过该特征可以将对象写作一组字节码,当在其他位置读到这些字节码时,可以依此创建一个新的对象,而且新对象的状态与原对象完全相同。为了实现对象序列化,要求必须能够访问类的私有变量,从而保证对象状态能够正确的得以保存和恢复。相应的,对象序列化API能够在对象重建时,将这些值还原给私有的数据成员。这是对java语言访问权限的挑战。通常用在服务器客户端的对象交换上面,另外就是在本机的存储。
           对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整性和可传递性。譬如通过网络传输,或者把一个对象保存成一个文件的时候,要实现序列化接口
        因为我是将对象序列化成xml通过webservice传输,我觉得我这个需求和这没什么直接关系,应该可以不用实现接口。


        4楼2014-02-20 11:17
        回复
          jpa详细介绍 http://thinkinside.tk/2012/12/30/JPA.html


          5楼2014-02-24 10:37
          回复
            jpa继承映射详细介绍http://www.oschina.net/question/129540_56134


            6楼2014-02-24 14:02
            回复
              @OneToMany在默认情况下,Hibernate会把一对多当成多对多的一种特殊情况!结果就是会帮我们生成一张中间表,所以注意要写@JoinColumn(name="")注解,因为在数据库中,不管是一对多还是多对一,都是在多的一方添加一的一个外键,所以这个jioncolumn的name值一般写成一的外键字段名


              7楼2014-02-24 18:41
              回复
                单向一对多 继承映射纠结了好久 最后还是得加个中间表解决问题


                8楼2014-02-24 19:12
                回复
                  2025-05-28 04:47:56
                  广告
                  9楼2014-02-25 10:37
                  回复
                    Spring 之注解事务 @Transactional
                    spring 事务注解
                    默认遇到throw new RuntimeException("...");会回滚
                    需要捕获的throw new Exception("...");不会回滚
                    // 指定回滚
                    @Transactional(rollbackFor=Exception.class)
                    public void methodName() {
                    // 不会回滚
                    throw new Exception("...");
                    }
                    //指定不回滚
                    @Transactional(noRollbackFor=Exception.class)
                    public ItimDaoImpl getItemDaoImpl() {
                    // 会回滚
                    throw new RuntimeException("注释");
                    }
                    // 如果有事务,那么加入事务,没有的话新建一个(不写的情况下)
                    @Transactional(propagation=Propagation.REQUIRED)
                    // 容器不为这个方法开启事务
                    @Transactional(propagation=Propagation.NOT_SUPPORTED)
                    // 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
                    @Transactional(propagation=Propagation.REQUIRES_NEW)
                    // 必须在一个已有的事务中执行,否则抛出异常
                    @Transactional(propagation=Propagation.MANDATORY)
                    // 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
                    @Transactional(propagation=Propagation.NEVER)
                    // 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
                    @Transactional(propagation=Propagation.SUPPORTS)
                    /*
                    public void methodName(){
                    // 本类的修改方法 1
                    update();
                    // 调用其他类的修改方法
                    otherBean.update();
                    // 本类的修改方法 2
                    update();
                    }
                    other失败了不会影响 本类的修改提交成功
                    本类update的失败,other也失败
                    */
                    @Transactional(propagation=Propagation.NESTED)
                    // readOnly=true只读,不能更新,删除
                    @Transactional (propagation = Propagation.REQUIRED,readOnly=true)
                    // 设置超时时间
                    @Transactional (propagation = Propagation.REQUIRED,timeout=30)
                    // 设置数据库隔离级别
                    @Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)


                    10楼2014-02-25 14:32
                    回复
                      一个类中 包括子类 都用到了注解的话 父类如果注解都写在get方法上 子类写在属性上会被忽略掉 以致抛出异常


                      11楼2014-02-26 13:24
                      回复
                        Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。关于java字节码的处理,目前有很多工具,如bcel,asm。不过这些都需要直接跟虚拟机指令打交道。如果你不想了解虚拟机指令,可以采用javassist。javassist是jboss的一个子项目,其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。


                        12楼2014-02-28 11:25
                        回复
                          jpa规范提供了EntityManager接口来操作数据库,它定义了一些操作数据库的方法,在这里介绍几个重要的方法,就是crud方法。
                          1.persist(Object entity)方法
                          这个方法把一个实体加入持久化上下文中,也就是缓存中,在事务提交或者调用flush()方法的时候,把这个实体保存到数据库中(执行insert语句),如果实体已存在,则抛出EntityExistsException异常,缓存则不存在了。
                          2.find(Class<T> entityClass,Object primaryObject)
                          根据主键从数据库中查询一个实体,这个方法首先从缓存中去查找,如果找不到,就从数据库中去找,并把它加入到缓存中。
                          3.merge(T object)
                          把一个对象加入到当前的持久化上下文中,就是把一个对象从detach转变为managed,并返回这个对象。当一个对象设置了主键,并调用此方法,就会从数据库中根据主键查找到该对象把它放到持久化上下文中,当事物提交的时候,如果对象发生了改变,更新该对象的改变到数据库中,如果对象没有改变,则什么也不做,如果对象没有设置主键,则插入该对象到数据库中。
                          4.remove(Object entity)
                          根据主键从数据库中删除一个对象,这个对象的状态必须是managed,否则会抛出IllegalArgumentException,在一个事务中删除一个对象,假如实体管理器对象为em,
                          em.remove(em.merge(entity)),如果直接调用em.remove(entity);会抛出异常
                          IllegalArgumentException。
                          下面介绍对象的状态
                          1. new/transient
                          新建的对象,或者是说这个对象没有加入到持久化上下文当中。
                          2 managed
                          对象存在持久化上下文中
                          3 detach
                          对象脱离了持久化上下文


                          13楼2014-03-04 16:55
                          回复
                            jpa事务 http://blog.csdn.net/turkeyzhou/article/details/5206371


                            14楼2014-03-06 16:00
                            回复
                              2025-05-28 04:41:56
                              广告
                              web容器 tomcat 和 apache 的区别
                              tomcat其实也是一个apache容器,他以一个apache进程存在着。可以处理JSP servlet请求,处理静态html页面没apache效率高。


                              15楼2014-03-06 16:22
                              回复