sha*_*wsy 4 java sql hibernate java-ee
我试图让hibernate在每次执行保存时写入新对象而不是更新现有记录.
public class Risk {
private long riskID;
private Vehicle vehicle;
}
public class Vehicle {
private long vehicleID;
private long riskID;
private String regNumber;
private String abiCode;
private String make;
private String model;
}
Run Code Online (Sandbox Code Playgroud)
所以如果把风险写入DB.然后我在网上更换车辆,并尝试再次将风险保存到数据库.我想在风险表中有两个风险,在车辆表中有两个车辆.
目前我正在使用hibernate会话Save(Object o).这总是在数据库中造成新风险,但从未创建新车辆.它只是更新原始的.
这是我的映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class lazy="false" name="uk.co.test.Risk" schema="quote_engine" table="GV_RISK" >
<id column="riskID" name="riskID" type="long">
<generator class="identity"/>
</id>
<many-to-one name="vehicle" class="uk.co.test.Vehicle" column="vehicleID" not-null="true" cascade="all" unique="true" />
</class>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="uk.co.test.Vehicle" schema="quote_engine" table="GV_VEHICLE">
<id name="vehicleID" type="long" column="vehicleID">
<generator class="identity" />
</id>
<property name="regNumber" type="string" column="regNumber" />
<property name="abiCode" type="string" column="abiCode" />
<property name="make" type="string" column="make" />
<property name="model" type="string" column="model" />
</class>
Run Code Online (Sandbox Code Playgroud)
我真的怀疑是否有可能让Hibernate自动神奇地做到这一点.您想要覆盖ORM的一个最基本的行为.他们的整个包是在一些Session中跟踪你的对象,以便将这些更新保存到数据库,而无需你自己对这些更新进行排序.
如果您不希望更新记录,请将您的setter设为私有并注释您的字段,以便获得字段访问权限.在xml中,default-access="field"在<hibernate-mapping>标记上设置属性.
然后,您需要先创建一个新对象,然后再将其添加到会话中.使用如下所示的方法获得服务:
public void saveVehicle(Vehicle vehicle) {
Vehicle vehicleNew = vehicle.copy();
// Risk would be copied via risk.copy() in vehicle.copy()
vehicleDao.save(vehicleNew)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3431 次 |
| 最近记录: |