<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)

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    在Struts1.1-1.2中如果不想沒有登錄的用戶訪問一些action,可以擴展RequestProcessor,并重載processProprocess方法,在其中進行驗證

    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;
        }
    }
    

    相應的,在struts-config.xml中加入controller元素

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

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






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

    三個@Entity類Tc, Tracer, Track是三向關聯(lián)的的表, @Embeddable類TcTracer則存儲著三個表的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的子元素,從而實現(xiàn)Tc的三相關聯(lián)。

    用HQL可以通過特定的Tc,Tracer得到對應的所有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 閱讀(379) | 評論 (0)編輯 收藏

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

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

    最后發(fā)現(xiàn)原來問題很簡單....是在用annotation重寫mapping的時候,忘記給@Id加上@GeneratedValue,導致第一個row insert后,再次insert時沒有生成新的id!

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

    想起了python的SQLObject, SQLAlchemy,雖然功能沒有Hibernate豐富,但是簡單實用!

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

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

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

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

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

    // !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>();
        // ...
    }
    

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

    Hibernate里,如果是Many-to-many的關系,可以任意設置主class

    通常,還可以將添加刪除關系的代碼包裝起來:

    // !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 閱讀(354) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: av电影在线免费看| 中文字幕亚洲一区二区va在线| a成人毛片免费观看| 亚洲AV综合色区无码一二三区| 久久久亚洲欧洲日产国码aⅴ| 亚洲色无码专区在线观看| 国产午夜无码视频免费网站| 美女网站免费福利视频| 99视频免费播放| 在线观看免费视频一区| jizz免费在线观看| 黄色a级免费网站| 精品亚洲视频在线| 亚洲日韩国产AV无码无码精品| 亚洲国产精品久久久久秋霞影院| 久久精品国产精品亚洲色婷婷| 国产亚洲美女精品久久久2020| 日批日出水久久亚洲精品tv| 韩国日本好看电影免费看| 日韩精品成人无码专区免费 | 免费在线精品视频| 成人国产mv免费视频| 日韩毛片免费在线观看| 天天拍拍天天爽免费视频| 妞干网免费视频观看| 成人无遮挡毛片免费看| 日韩欧美一区二区三区免费观看| 四虎永久在线观看免费网站网址| 18女人腿打开无遮掩免费| 国产成人精品免费视频网页大全| 最近免费2019中文字幕大全| 精品一区二区三区免费毛片爱| 污污网站18禁在线永久免费观看| 久久久久久国产精品免费免费男同 | 亚洲精品美女久久7777777| 成人亚洲国产va天堂| 亚洲乱亚洲乱妇24p| 午夜亚洲国产理论片二级港台二级| 亚洲国产成人精品无码区花野真一| 亚洲爆乳AAA无码专区| 国产亚洲精品AAAA片APP|