Hibernate生成器类的用法

时间:2015-04-24 15:37:47

标签: java hibernate

我正在使用Struts 1,hibernate 3,spring 1重构旧的Web应用程序(2006)......

我正在升级库。

使用hibernate映射xml文件我修改" ID" /主键"行为以便与任何实际数据库兼容。

据说我用了:

<class name="com....Declaration" table="DECLARATION">
        <id name="pk" type="integer" column="PK_DECLARATION" unsaved-value="null">
            <generator class="native"/>
            ....

现在我正在使用SQL Server。但是,如果有一天我必须更改为例如Oracle,我是否必须更改所有映射才能兼容?

问题是设置与多个数据库兼容的映射,最好的方法是使用&#34; Native&#34;生成器还是创建我自己的?

1 个答案:

答案 0 :(得分:0)

感谢您的回答。所以我的选择是设置我自己的ID / PK生成器类,以避免在我更改数据库时更改映射。

       Socket socket = null;
       DataInputStream dataInputStream = null;
       dataInputStream = new DataInputStream(
                              socket.getInputStream());

       String clientDayOfWeek = dataInputStream.readUTF();
       ArrayList<String> ar = new ArrayList<String>();
       String temp = clientDayOfWeek;
       ar.add(temp);
       System.out.print("Items in list: "+ ar);

1我有一张名为SEQUENCE的桌子。该表存储了每个对象存储的最后一个ID。(法语中的一些变量抱歉:旧代码)

<class name="com...declaration.Declaration" table="DECLARATION">
        <id name="pk" type="integer" column="PK_DECLARATION" unsaved-value="null">
            <generator class="com....PkGenerator">
                <param name="table">SEQUENCE</param>
                <param name="primary_key_column">ENTITE</param>
                <param name="primary_key_value">DECLARATION</param>
                <param name="value_column">NUMERO</param>
            </generator>
        </id>

        <timestamp name="version" column="DATE_VERSION"  unsaved-value="null" />

        <property name="dateDebutAdresseProvisoire" type="timestamp" column="DATE_DEBUT_ADRESSE_PROVISOIRE" />
....
    </class>

调用PK生成器类时,将检查并递增最后一个ID。如果ID不存在,则会创建一个。

PK生成器类使用IdentifierGenerator,Configurable interfaces。

ENTITE         NUMERO   DATE   DISCRIMINANT
---------------------------------------
DECLARATION      2      NULL     NULL
....

通过“Configurable”接口的实现,每个instanciated生成器将设置成员(table,name,column,..)来获取序列值。对象存储也选择,插入和更新请求以获取最后一个索引,更新它,如果不存在则创建它。

现在我只是想知道我是否在生成方法中执行select,update,insert,如果我设置另一个(隔离的)事务。 如果我设置了在select(插入/更新之前)

上锁定数据库