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

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

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

    隨筆-109  評論-187  文章-25  trackbacks-0
    ?

    1 :單表添加過程

    添加單表的過程非常簡單直接寫一個對象就可以,最關鍵的是處理主鍵,主鍵的 SEQUERCE 的生成,(不過還不太懂如何去配置 SEQUENCE 的生成)

    ?

    ?

    2 1:N 的添加

    ?

    對于 1 的表,要注意映射對應 N 的關系

    比如采用如下形式:

    ?

    CREATE TABLE TEST

    (

    ? USERID??? INTEGER ???????????????????????????? NOT NULL,

    ? USERNAME? VARCHAR2 ( 100 BYTE )

    )

    ?

    CREATE TABLE TEST_01

    (

    ? ID????? NUMBER ,

    ? USERID? NUMBER ,

    ? NAME??? VARCHAR2 ( 100 BYTE )

    )

    ?

    ?

    ??? <!--table TEST-->

    ??????? <class name="Test">

    ????????????? <extension vendor-name="kodo" key="detachable" value="true"/>

    ????????????? <extension vendor-name="kodo" key="jdbc-class-ind-name" value="none"/>

    ????????????? <extension vendor-name="kodo" key="jdbc-class-map" value="base">

    ?????????????????? <extension vendor-name="kodo" key="pk-column" value="USERID"/>

    ?????????????????? <extension vendor-name="kodo" key="table" value="TEST"/>

    ???????????? </extension>?

    ???????????? <field name="userName" default-fetch-group="true">

    ??????????????? <extension vendor-name="kodo" key="jdbc-field-map" value="value">

    ??????????????????? <extension vendor-name="kodo" key="column" value="USERNAME"/>

    ??????????????? </extension>

    ??????????? </field>

    ?????????? <field name="list" default-fetch-group="true">

    ??????????? ??? <collection element-type="Test_01"/>

    ?????? 1:n 的對應關系在此 ?????????? ??? <extension vendor-name="kodo" key="jdbc-delete-action" value="cascade"/>???????????

    ??????????????? <extension vendor-name="kodo" key="jdbc-field-map" value="one-many">???????????????

    ??????????????? ??? <extension vendor-name="kodo" key="table" value="TEST_01"/>

    ??????????????? ??? <extension vendor-name="kodo" key="ref-column.USERID" value="USERID"/>

    ??????????????? </extension>???????????

    ??????????? </field>

    ???????? </class>?

    ?? <!--table TEST_01-->?????

    ?????? <class name="Test_01">

    ?????? ???????<extension vendor-name="kodo" key="detachable" value="true"/>

    ????????????? <extension vendor-name="kodo" key="jdbc-class-ind-name" value="none"/>

    ????????????? <extension vendor-name="kodo" key="jdbc-class-map" value="base">

    ?????????????????? <extension vendor-name="kodo" key="pk-column" value="ID"/>

    ?????????????????? <extension vendor-name="kodo" key="table" value="TEST_01"/>

    ???????????? </extension>?

    ???????????? <field name="name" default-fetch-group="true">

    ??????????????? <extension vendor-name="kodo" key="jdbc-field-map" value="value">

    ??????????????????? <extension vendor-name="kodo" key="column" value="NAME"/>

    ??????????????? </extension>

    ??????????? </field>

    ???????????? <!--field name="userId" default-fetch-group="true">

    ?????????????? ?<extension vendor-name="kodo" key="jdbc-field-map" value="value">

    ??????????????????? <extension vendor-name="kodo" key="column" value="USERID"/>

    ??????????????? </extension>

    ??????????? </field-->

    ??????? </class>?

    注意一下的問題:

    ? 1 :主鍵的生成

    ? 2 :主要是主鍵的生成,在 .JDO 文件中配置好了,就不需要再在 PO 的對象中聲明了

    3 1 對多的關聯應該在 1 class 中配置好了,去映射 N CLASS ,再 N CLASS 中,也就不需要聲明這個變量字段了,同時也不要再 N class 中的配置也不要聲明當前的列了, KODO ORM 會自動去映射這個字段 ( ) ?

    ?

    3 1:N 的查詢問題

    查詢是 KODO 里面的最簡單功能,但是如何關聯 1:N 的查詢,也就是,如果在你查詢到 1 表的數據,同時把 N 表的關聯數據都帶出來呢?

    比如:

    ? Test

    USERID??? USERNAME

    1600???????????????????????????? 11111

    ? Test_01

    ID???? USERID? NAME

    1601?? 1600???? TOM

    1602?? 1600???? MIKE

    構造查詢條件:

    helper.setQueredClazz(Test.class);

    helper.getWheres().put("userName","11111");

    ?

    進行查詢

    ?????? public List getAllTest(final SearchHelper helper) {

    ?????????????

    ????????????? return (List)getJdoTemplate().execute(new JdoCallback(){

    ????????????? ?????? public Object doInJdo(PersistenceManager srcPM) throws JDOException {

    ???????????????????? ?????? KodoPersistenceManager pm = (KodoPersistenceManager)srcPM;

    ???????????????????? ?????? List list = new ArrayList();

    ???????????????????? ?????? KodoQuery query = null;

    ???????????????????? ?????? try{

    ???????????????????? ????????????? query = (KodoQuery) pm.newQuery(helper.getQueredClazz());

    ???????????????????? ?????? }catch(Exception e){

    ???????????????????? ?????? ?????? e.printStackTrace();

    ???????????????????? ?????? }

    ???????????????????? ?????? list = (List)pm.detachAll((Collection)query.executeWithMap(helper.getParams()));

    ???????????????????? ?????? return list;

    ???????????????????? }

    ????????????? });

    ?

    ?????? }

    注意問題

    ? 1 :這個查詢的查詢條件,是不是缺少一些 KODO 所必須的查詢條件????

    ? 2 :如何不關聯多表的查詢,和如何關聯上多表的查詢(下午繼續試試!!)

    ?

    ?? 如果想不帶出來: <field name="list" default-fetch-group="false">

    ?? 如果想連帶 N 表的數據一起查詢出來 default-fetch-group=”true” 設置一下就可以

    ?? 那么查詢到的結果的 LIST 就是空的了。

    ?

    3 :一個對象在經過添加之后這個對象已經被 persistentManager 設置成 ATTACHED 狀態了,要是新取一個對象然后通過 pm.getObjectID(Object obj) 這樣得到的永遠是 NULL ,因為他處于 detached 狀態了。所以你永遠拿不到他的 objectId

    ?

    4:? 1:n 的修改問題

    1 :首先查詢得到一個對象,這個對象可以把他 attach 也可以 detach ,不過無論如何都可以拿到他的 ojbectid ,因為,可以通過反射來拿他的 ID ,即使他已經被 detach 了,如果沒有 detach 可以直接通過 pm.getObjectId(Object obj) 拿到 objectId ,這些查詢都可以拿到結果

    ?

    2 :如何修改,以及如何修改其關聯!

    ?? 我修改一個 a----------1:n----------------b

    ?? 1 :修改了 a 成功

    ?? 2 :修改了 a 相關聯的其中一個 b ,但是沒有成功,調試找原因中。。。。。。。。

    ?? 原因如下 :

    因為在 b 表中沒有設置主鍵,不知道怎么多出一條一樣的數據來,原來 KODO 更新一個表的時候,他根據主鍵來更新表,這個主鍵就是在 CLASS 中設置的主鍵,要是只是在 CLASS 中設置而不在表中設置,也就是說 *.JDO 的配置主鍵與實際表不一致的時候,如果表不設置主鍵,拿就意味著他更新了與 CLASS 相關主鍵的所有信息,所以一定要保持 .JDO 的配置與表的一致!!否則有寫危險。

    ?

    5 ???????????????? 1:n 的刪除問題

    1: 關聯刪除和非關聯刪除

    ?1 :主表設置

    ?<extension vendor-name="kodo" key="jdbc-delete-action" value="cascade"/> 之后在數據庫 n 表中還是沒有刪除關聯的數據,只是把關聯的數據置成 null 了。

    TODO

    ?

    沒有完成理解,以后繼續 ….

    ?

    原因是這樣的:用法錯誤!!

    應該在 1 表中這樣配置,刪除的時候級聯了 n 表的數據,并且刪除成功!

    <extension vendor-name="kodo" key="element-dependent" value="true"/>

    ?

    ?

    ?

    ?

    6? 實體對象的 3 種狀態

    ?1 Transient (自由狀態 (VO)

    2 Persistent (持久狀態) (PO)

    ? 一個處于 Persitent 的對象被 Delete 之后就變成了 Transient 狀態因為 Id null 了吧,(自己猜的,有待驗證

    ?

    3: Detached (游離狀態) (VO)

    ?

    Detached 對象包含了主鍵的值,或者說對象的值,而 Transient 對象就不包含。

    ?

    ?

    ?

    7? 什么是臟數據

    ?

    臟數據并非廢棄或者無用的數據,而是指一個數據對象所攜帶的信息發生了改變后的狀態

    ?

    ?

    ?

    ?

    8 對與 blob 字段的使用

    ? ????????<field name="userobj" default-fetch-group="true">

    ????????? ??? <extension vendor-name="kodo" key="jdbc-field-map" value="byte-array">

    ?????????? ??? ??? <extension vendor-name="kodo" key="column" value="USEROBJ"/>

    ?????? ??? </extension>

    ???????? </field>

    Test 的類中,只要加一個 ??? private byte[] userobj; 就可以搞定

    ?

    9 ???????????????? 1 n 表的添加在從表開始添加,從表級聯主表,雙向映射的問題!

    從表配置如下: ???????????? <field name="test" default-fetch-group="true">

    ??????????????? <extension vendor-name="kodo" key="jdbc-field-map" value="one-one">

    ??????????????????? <extension vendor-name="kodo" key="column.USERID" value="userId"/>

    ?????????????? </extension>

    ?????????? </field>

    ?

    ?

    從表的類多了一項: public Test test;

    ?????? ?????? Test_01 test_01 = new Test_01();

    ?????? ?????? test_01.setName("form nnnn");

    ????????????? Test test = new Test();

    ?????? ?????? test.setUserName("form NNNN");

    ?????? ?????? test_01.setTest(test);

    ?????? ?????? service.addTestFromN(test_01);

    這樣添加從表的時候主表也添加成功了 !!!!!! 注意這個從表添加一條記錄,如果從表添加 2 條記錄如何???? ??? ??????

    ?

    添加沒有問題,但是從 n 表刪除數據的時候,只能刪除 N 表中的數據,但是 1 表數據并沒有刪除,并且還會拋出一個異常出來。

    ?

    10 ?????????? 關系型數據庫與面向對象數據結構之間的關系

    ?1 Table per concrete class

    表與子類之間獨立的 1 1

    ?2 Table per sub class

    每個子類對應一張子表,并與主類共享主表

    ?3 Table per class hierachy

    表與類是 1 n 關系 ????? -

    ?

    ?

    ?

    11 ?????????? ENHANCE 原理

    ?Jdo ENHANCE 一個對象,在編譯之后進行 ENHANCE ,就是插入一些 2 進制的字節碼,增加一些方法,和屬性比如序列化攔截器等,如果一個對象處于 ATTACH 狀態在 SET 之后數據庫就發生變化,這是為什么呢?就是因為 ENHANCER 起的作用, ENHANCE 之后增加一些 OBSERVER SET 之后馬上觸發程序使數據庫發生了變化,如果沒有 ENHANCE 則不會發生變化,真是受益匪淺啊

    ?

    ?

    12 ?????????? 關聯(未結束)

    A.??????? 如果設置了雙向管理一定要互相 SET 否則 KODO 拋異常出來

    B.??????? 如果設置了 inverse-owner inverse-logical 有一下幾個屬性

    ?

    ?? Inverse-owner

    <extension vendor-name="kodo" key="inverse-owner" value="group"/>

    KODO 的原文:

    Use the inverse-owner field extension to indicate that this field is part of a two-sided relation with the named field, and that the named field owns the relation. The named field should not also have this extension; only one field can be the owner. See below for an example

    ? ?inverse-logical?

    C.??????? 多對多的關系

    ? ?? ? <field name="firmwareTags" default-fetch-group="true">

    ???????? <collection element-type="FirmwareTag"/>

    ???????? <extension vendor-name="kodo" key="jdbc-field-map" value="many-many">

    ???????????? <extension vendor-name="kodo" key="element-column.FIRMWARE_TAG_ID"

    ???????????????? value="FIRMWARE_TAG_ID"/>

    ???????????? <extension vendor-name="kodo" key="table" value="MVP_SUBSCRIBERCLASS_FWTAG"/>

    ???????????? <extension vendor-name="kodo" key="ref-column.SUBSCRIBER_CLASS_ID" value="SUBSCRIBER_CLASS_ID"/>

    ???????? </extension>

    ??? ? </field>

    ?

    ?

    ?

    ?

    ?

    ?

    13 ?????????? ? 類之間的繼承關系和表之間的關聯關系 ??

    jdbc-class-ind-name

    ?

    ?

    ?

    ?

    14 ?????????? attach pm 的關系

    ? 一個對象在沒有處于 ATTCH 狀態的時候用 PM 對其進行 deletepersistence 是不會成功的,因為, OBJECT 并沒有處于 PM 的管理狀態,就是說當前的對象沒有 object ID, 要是想刪除成功,必須先進行 attach ,要是對 object 進行 makepersistence 操作就不不必進行 ATTACH 操作了,因為當前 object 與數據庫并沒有關系,也就是說當前對象并沒有存在數據庫中,知識一個添加操作而已。

    ?

    ?

    15 ?????????? KODO 識別 SCHEME 和數據庫權限的問題

    要是給予 KODO.PROPERTY 里面設立的用戶 DBA 的權限, KODO 可以隨機的選擇 SCHEME ,而不是指定的 SCHEME ,當去掉 DBA 的權限的時候此問題就可以解決掉,郁悶啊,有時間取官方網站看看到底是不是配置的問題,或者其他問題

    其實 KODO 里面有個數據庫的配置,

    kodo.jdbc.DBDictionary: DefaultSchemaName

    如果聯系定義的 2 DBDictionary, 那么下面的將覆蓋了上面的,會出現, SCHEMA 亂掉的情況,如果注釋掉下面的那行,就可以搞定了,不會出現錯誤了

    kodo.jdbc.DBDictionary: DefaultSchemaName=cmccod,BatchLimit=500

    kodo.jdbc.DBDictionary: BatchLimit=500

    ?

    ?

    ?

    posted on 2006-04-13 08:49 小小程序程序員混口飯吃 閱讀(399) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 无码的免费不卡毛片视频| 亚洲美女视频免费| 成人爱做日本视频免费| 亚洲人成高清在线播放| 18禁黄网站禁片免费观看不卡| 亚洲va中文字幕无码久久不卡| 国产在线观看无码免费视频| 亚洲精品无码不卡在线播放HE| 亚洲毛片基地4455ww| 无限动漫网在线观看免费| 亚洲综合校园春色| 最近免费中文字幕大全| 亚洲综合色婷婷在线观看| 免费无码黄动漫在线观看| 国产成人亚洲精品无码AV大片| 亚洲成AV人网址| 永久免费av无码入口国语片| 亚洲视频在线一区| 国产特黄一级一片免费| 激情97综合亚洲色婷婷五| 在线观看肉片AV网站免费 | www国产亚洲精品久久久| 亚洲av色福利天堂| 曰批全过程免费视频网址| 亚洲色欲色欱wwW在线| 亚洲国产成人久久一区久久| a视频免费在线观看| 亚洲一级黄色视频| 免费观看又污又黄在线观看| 亚洲综合在线另类色区奇米| 88xx成人永久免费观看| 亚洲成人精品久久| 免费电影在线观看网站| 免费的黄色网页在线免费观看| 亚洲Av无码精品色午夜| 国产v精品成人免费视频400条| 日韩一级片免费观看| 亚洲永久永久永久永久永久精品| 成人永久免费高清| 久久精品无码专区免费东京热| 亚洲av中文无码乱人伦在线观看|