我正在GWT中开发一个客户端 - 服务器项目,在用户填写表单后,我想更新我的数据库并最终创建新数据。 为此,我创建了一个“传感器”和与之关联的系统链接。但是,“传感器”也与传感器系列相关联,我必须在我的表sensorFamilySensorFamilyLink中创建链接,但我没有管理。 实际上,这是我创建传感器和链接的代码:
@Override
public void updateSensor(SystemDTO system, SensorDTO sensorDTO, String sensorFamName) {
Sensor sensor = null;
SensorFamily sensorFam = null;
if(sensorDTO.getId() <0) {
sensor = new Sensor();
sensor.fillFromDTO(sensorDTO);
sensor.create();
}
else {
sensor = Sensor.queryById(sensorDTO.getId());
sensor.fillFromDTO(sensorDTO);
sensor.update();
}
sensorFam = SensorFamily.queryByName(sensorFamName);
// Creation of the link between sensor and sensorFamily.
SensorFamilySensorLink linksensor = null;
if (!linkFam.isEmpty()) {
linksensor = linkFam.get(0); // We take the first one because there is only one.
}
if(linksensor == null) { // creation of a sensor
//List<SensorFamilySensorLink> liste = SensorFamilySensorLink.query();
linksensor = new SensorFamilySensorLink();
linksensor.setSensorId(sensor.getId());
linksensor.setSensorFamilyId(sensorFam.getId());
linksensor.create();
}
else {
linksensor.setSensorFamilyId(sensorFam.getId());
linksensor.update();
}
虽然更新有效,但链接的创建不起作用。这是我的方法“创建”的代码:
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class SensorFamilySensorLink {
/** The id. */
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private long id;
/** The associated sensor id. */
@Persistent
private long sensorId;
/** The associated sensorFamily id. */
@Persistent
private long sensorFamilyId;
/**
* Create.
*/
public void create() {
PersistenceManager pm = PMF.getManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
pm.makePersistent(this);
tx.commit();
} catch(Exception e) {
} finally {
if (tx.isActive()) {
tx.rollback(); // Error occurred so rollback the PM transaction
}
}
pm.close();
}
在debuggind之后,问题来自生成,如果在表中使用SQL方法INSERT的ID。当我这样做时,生成的id不起作用:
pm.makePersistent(this);
有人可以告诉我我忘记了什么,因为我一直在寻找两天而我不知道如何解决这个问题?此外,我使用相同的代码创建与系统和系列链接的传感器链接,它适用于第一个。 如果您需要更多信息,请不要犹豫,问我。提前谢谢。