有两个双向双联的表,一个是1,另一个是0或1.我把它们配置成了one-to-one的关系。
第一个的hbm文件:
<hibernate-mapping>
<class name="com.hibe.demo.ClientTradeSI" table="ClientTradeSI">
<id name="siRefNo" type="java.lang.Integer">
<column name="siRefNo" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">ClientTradeSI_seq</param>
</generator>
</id>
<property name="siState"></property>
<property name="tradeCcy" ></property>
<one-to-one name="clientTrade" class="com.hibe.demo.ClientTrade" cascade="all" property-ref="clientTradeSI"></one-to-one>
</class>
</hibernate-mapping> 第二个Hbm文件:
<hibernate-mapping>
<class name="com.hibe.demo.ClientTrade" table="ClientTrade">
<id name="tradeRefNo" type="java.lang.Integer">
<column name="tradeRefNo" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">ClientTrade_seq</param>
</generator>
</id>
<property name="etId"></property>
<property name="averagePrice" ></property>
<many-to-one not-null="true" name="clientTradeSI" class="com.hibe.demo.ClientTradeSI" column="siRefNo" cascade="all"
unique="true">
</many-to-one>
</class>
</hibernate-mapping>我现在想单独保存一个ClientTrade,因为它必须要有一个ClientTradeSI相对应,我就从数据库里查出来付给它。
测试代码如下:
ClientTrade clientTrade=new ClientTrade();
clientTrade.setAveragePrice(3232);
clientTrade.setMarketId(23);
ClientTradeSI ctSi=(ClientTradeSI)session.get(ClientTradeSI.class, new Integer(1)); ctSi.setClientTrade(clientTrade);
clientTrade.setClientTradeSI(ctSi); session.save(clientTrade);
执行后报“违反唯一约束条件”的错误,因为把它的父类当新的记录去保存了。我想要的结果是:如果数据库里没有这条父类记录才级联把它保存到数据库,否则就不用。这要怎么做啊??
第一个的hbm文件:
<hibernate-mapping>
<class name="com.hibe.demo.ClientTradeSI" table="ClientTradeSI">
<id name="siRefNo" type="java.lang.Integer">
<column name="siRefNo" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">ClientTradeSI_seq</param>
</generator>
</id>
<property name="siState"></property>
<property name="tradeCcy" ></property>
<one-to-one name="clientTrade" class="com.hibe.demo.ClientTrade" cascade="all" property-ref="clientTradeSI"></one-to-one>
</class>
</hibernate-mapping> 第二个Hbm文件:
<hibernate-mapping>
<class name="com.hibe.demo.ClientTrade" table="ClientTrade">
<id name="tradeRefNo" type="java.lang.Integer">
<column name="tradeRefNo" precision="22" scale="0" />
<generator class="sequence">
<param name="sequence">ClientTrade_seq</param>
</generator>
</id>
<property name="etId"></property>
<property name="averagePrice" ></property>
<many-to-one not-null="true" name="clientTradeSI" class="com.hibe.demo.ClientTradeSI" column="siRefNo" cascade="all"
unique="true">
</many-to-one>
</class>
</hibernate-mapping>我现在想单独保存一个ClientTrade,因为它必须要有一个ClientTradeSI相对应,我就从数据库里查出来付给它。
测试代码如下:
ClientTrade clientTrade=new ClientTrade();
clientTrade.setAveragePrice(3232);
clientTrade.setMarketId(23);
ClientTradeSI ctSi=(ClientTradeSI)session.get(ClientTradeSI.class, new Integer(1)); ctSi.setClientTrade(clientTrade);
clientTrade.setClientTradeSI(ctSi); session.save(clientTrade);
执行后报“违反唯一约束条件”的错误,因为把它的父类当新的记录去保存了。我想要的结果是:如果数据库里没有这条父类记录才级联把它保存到数据库,否则就不用。这要怎么做啊??
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货