<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 11  文章 - 11  trackbacks - 0

    留言簿(2)

    隨筆分類(13)

    隨筆檔案(11)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    在Struts1.1-1.2中如果不想沒(méi)有登錄的用戶訪問(wèn)一些action,可以擴(kuò)展RequestProcessor,并重載processProprocess方法,在其中進(jìn)行驗(yàn)證

    public class CustomRequestProcessor
            extends RequestProcessor {
        protected boolean processPreprocess (
                HttpServletRequest request,
                HttpServletResponse response) {
            HttpSession session = request.getSession(false);
            //If user is trying to access login page
            // then don't check
            if( request.getServletPath().equals("/loginInput.do")
                || request.getServletPath().equals("/login.do") )
                return true;
            //Check if userName attribute is there is session.
            //If so, it means user has allready logged in
            if( session != null &&
            session.getAttribute("userName") != null)
                return true;
            else{
                try{
                    //If no redirect user to login Page
                    request.getRequestDispatcher 
                        ("/Login.jsp").forward(request,response);
                }catch(Exception ex){
                }
            }
            return false;
        }
    }
    

    相應(yīng)的,在struts-config.xml中加入controller元素

    <controller>
     <set-property  property="processorClass"
     value="com.sample.util.CustomRequestProcessor"/>
    </controller>
    

    但剛才看到在Struts1.3中,已經(jīng)不再使用RequestProcessor,而是用ComposableRequestProcessor 來(lái)實(shí)現(xiàn)自定義的request響應(yīng)。






    posted @ 2007-04-09 18:52 hijeff 閱讀(448) | 評(píng)論 (0)編輯 收藏

    三個(gè)@Entity類Tc, Tracer, Track是三向關(guān)聯(lián)的的表, @Embeddable類TcTracer則存儲(chǔ)著三個(gè)表的ForeignKey

    @Entity
    @Table(name= "tc", catalog="first_hiber")
    public class Tc {
          @org.hibernate.annotations.CollectionOfElements
          @JoinTable(name="tc_tracer", joinColumns=@JoinColumn(name="tc_id"))
          private Set<TcTracer> tcTracers = new HashSet<TcTracer>();
    
          @Id @GeneratedValue
          @Column(name="tc_id", nullable= false)
          private Long id;
    }
    
      @Embeddable
      @Table(name="tc_tracer")
      public class TcTracer {
          @org.hibernate.annotations.Parent
          private Tc tc;
      
    @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="tracer_id", nullable=false, updatable=false) private Tracer tracer; @ManyToOne(cascade=CascadeType.ALL) @JoinColumn(name="track_id", nullable=false, updatable=false) private Track track; }

    如上,將TcTracer作為Tc的子元素,從而實(shí)現(xiàn)Tc的三相關(guān)聯(lián)。

    用HQL可以通過(guò)特定的Tc,Tracer得到對(duì)應(yīng)的所有Track:

      select tctracers.track
      from Tc tc
          join tc.tcTracers tctracers
      where tc.name="tc name"
          and tctracers.tracer.name="tracer name"
    
     List<Track> tracks = session.createQuery(HQL).list();
    
    posted @ 2007-04-02 17:45 hijeff 閱讀(388) | 評(píng)論 (0)編輯 收藏

    今天調(diào)試程序的時(shí)候,發(fā)現(xiàn)插入數(shù)據(jù)時(shí)老是拋出異常:"a different object with the same identifier value was already associated with the session"

    起初以為是override hashCode()的方法不對(duì)。后來(lái)google查了查多數(shù)問(wèn)題都出現(xiàn)在detached對(duì)象之后,再鏈接session由于對(duì)象的改變而出現(xiàn)的異常。

    最后發(fā)現(xiàn)原來(lái)問(wèn)題很簡(jiǎn)單....是在用annotation重寫mapping的時(shí)候,忘記給@Id加上@GeneratedValue,導(dǎo)致第一個(gè)row insert后,再次insert時(shí)沒(méi)有生成新的id!

    看來(lái)annotation雖然方便了mapping,但由于和代碼集中在一塊了,很容易出現(xiàn)疏忽大意的錯(cuò)誤,而且一般都不會(huì)注意到-.-

    想起了python的SQLObject, SQLAlchemy,雖然功能沒(méi)有Hibernate豐富,但是簡(jiǎn)單實(shí)用!

    posted @ 2007-03-29 20:28 hijeff 閱讀(416) | 評(píng)論 (0)編輯 收藏

    通常為了實(shí)現(xiàn)entity class的雙向association,每添加一組實(shí)例在java中需要兩行代碼:

    persion.getAddresses().add(address);
    address.getPersons().add(person);

    但對(duì)Hibernate而已,上面的代碼會(huì)被轉(zhuǎn)化為兩條insert語(yǔ)句,

    為了避免這樣的情況出現(xiàn)需要定義inverse屬性,告訴Hibernate persion和address之間的關(guān)系:

    // !file: Person.class
    public class Person {
        // ...
        @ManyToMany(
                  targetEntity= Address.class,
                  cascade = CascadeType.ALL,
          )
        @JoinTable(
                  name="persion_address",
                  joinColumns= {@JoinColumn(name="person_id")},
                  inverseJoinColumns= {@JoinColumn(name="address_id")}
          )
          private Set<Address> adressses = new HashSet<Address> (0);
        // ...
    }
    
    // !file: Address.class
    public class Address {
        // ...
        @ManyToMany(
                targetEntity= Persion.class,
                cascade = CascadeType.ALL, 
                mappedBy = "addresses"
        )
        private Set<Person> persons = new HashSet<Person>();
        // ...
    }
    

    上面的兩個(gè)annotation告訴Hibernate,Person是主,對(duì)Address中persons屬性的修改將不會(huì)產(chǎn)生SQL語(yǔ)句。

    Hibernate里,如果是Many-to-many的關(guān)系,可以任意設(shè)置主class

    通常,還可以將添加刪除關(guān)系的代碼包裝起來(lái):

    // !file: Person.class
    public class Person {
        // ...
        public void addAddress(Address address) {
            this.getAddresses().add(address);
            address.getPersons().add(this);
        }
        public void removeAddress(Address address) {
            this.getAddresses().remove(address);
            address.getPersons().remove(this);
        }
        //...
    } 
    



    posted @ 2007-03-27 21:18 hijeff 閱讀(362) | 評(píng)論 (0)編輯 收藏

    http://www.box.net/shared/102b5irypc

    差不多把平時(shí)用的上的讀完了,真感覺(jué)受益匪淺。不但詳細(xì)的介紹了Hibernate的特性用法,而且其中介紹的ORM基本概念,灌輸?shù)腛RM的思想也正是我所需要的。

    對(duì)一個(gè)新手來(lái)說(shuō),business key, surrogate key, entity type, value type, transient, persistent, detached, persistence context...這些是什么概念,為什么要提出來(lái),以及怎樣實(shí)現(xiàn)的在書中都會(huì)有簡(jiǎn)單明了的解釋。

    不多說(shuō)了,現(xiàn)在把書放出來(lái),誰(shuí)看誰(shuí)知道;)

    posted @ 2007-03-23 08:21 hijeff 閱讀(2291) | 評(píng)論 (7)編輯 收藏

    之前都是用最蠢的方法:SQL建立數(shù)據(jù)庫(kù)相關(guān)的表,然后再Java寫映射寫配置文件.....

    實(shí)際上使用Hibernate自帶的工具hbm2ddl,建立根據(jù)你的對(duì)象建立數(shù)據(jù)庫(kù)是很愜意的一件事;)

    首先當(dāng)然要建好POJO object, XML Mapping File(也可以使用工具根據(jù)POJO class建立),配置文件(hibernate.cfg.xml)

    然后運(yùn)行下面的Java代碼


    import org.hibernate.cfg.Configuration; 
    import org.hibernate.tool.hbm2ddl.SchemaExport;
    
    public class SchemaUtil {
    public static void main(String[] args) {

    Configuration cfg = new Configuration().configure(); SchemaExport schemaExport= new SchemaExport(cfg); schemaExport.create(false, true); } }
    再看看數(shù)據(jù)庫(kù),表是不是已經(jīng)幫你建好了,對(duì)于我這樣不熟悉數(shù)據(jù)庫(kù)的人真是太方便了

    Technorati : , , ,
    Del.icio.us : , , ,

    posted @ 2007-03-21 00:56 hijeff 閱讀(5280) | 評(píng)論 (4)編輯 收藏

    內(nèi)容詳實(shí),通俗易懂

    決定花幾天時(shí)間好好的讀讀這本書,系統(tǒng)的學(xué)習(xí)Hibernate。

    Technorati : , ,
    Del.icio.us : , ,

    posted @ 2007-03-20 22:14 hijeff 閱讀(278) | 評(píng)論 (0)編輯 收藏
    Set set = new HashSet(Arrays.asList(array));
    
    posted @ 2007-03-17 21:58 hijeff 閱讀(348) | 評(píng)論 (0)編輯 收藏
    主站蜘蛛池模板: 在线观看免费无码专区| 亚洲精品狼友在线播放| 东方aⅴ免费观看久久av| 国产亚洲蜜芽精品久久| 亚洲白色白色在线播放| 亚洲小视频在线观看| 婷婷亚洲久悠悠色悠在线播放| 亚洲国产黄在线观看| 成人激情免费视频| 最近中文字幕免费mv视频8| 欧洲一级毛片免费| 99热在线精品免费全部my| 在线观看免费毛片| 俄罗斯极品美女毛片免费播放| 免费观看理论片毛片| 久久久久亚洲国产| 亚洲一级片在线观看| XXX2高清在线观看免费视频| 久久久久国色AV免费看图片| 丁香五月亚洲综合深深爱| 亚洲国产视频网站| 美女视频黄a视频全免费网站色| A片在线免费观看| 久久受www免费人成_看片中文| 亚洲国产婷婷综合在线精品 | 国产亚洲精品AAAA片APP| 免费视频精品一区二区| a级毛片高清免费视频就| 永久免费AV无码国产网站| 亚洲第一永久AV网站久久精品男人的天堂AV| jizzjizz亚洲| 色欲aⅴ亚洲情无码AV蜜桃| 在线观看免费av网站| 亚洲精品一级无码中文字幕| 亚洲欧洲国产成人精品| 99久久精品国产免费| 国产亚洲一区二区手机在线观看| 免费国产黄网站在线看| 国产a级特黄的片子视频免费| 波多野结衣亚洲一级| 4hu四虎最新免费地址|