无法使用我的程序获取生成的Id。 GWT

时间:2015-11-26 09:30:08

标签: java persistence jdo

我正在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);

有人可以告诉我我忘记了什么,因为我一直在寻找两天而我不知道如何解决这个问题?此外,我使用相同的代码创建与系统和系列链接的传感器链接,它适用于第一个。 如果您需要更多信息,请不要犹豫,问我。提前谢谢。

0 个答案:

没有答案