我正在使用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;生成器还是创建我自己的?
答案 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(插入/更新之前)
上锁定数据库