Объекты обновления JDO и Cloud SQL с помощью makePersistentAll

Я использую Google Cloud SQL с JDO. Когда я пытаюсь использовать JDO PersistenceManager для хранения новых объектов с новым ключом, он работает нормально, однако я получаю сообщение об ошибке, когда пытаюсь обновить объекты, уже вставленные в базу данных:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '503062001-43661003' for key 'PRIMARY'

Ключ действительно дублирован, но я хочу обновить этот объект.

Можно ли сделать это с помощью метода PersistentManager.makePersistentAll () или другим способом, который позволяет избежать написания запроса UPDATE вручную?

Подробнее: объект, который я пытаюсь сохранить, определяется следующим образом:

PersistenceCapable(table = "xxx")
public class XXX {

   @PrimaryKey
   @Index(name = "xxx_id")
   private Long userId;

   @PrimaryKey
   @Index(name = "xxx_idx")
   @Column(length = 128)
   private String otherId;
   ...
}

person Clynamen    schedule 01.02.2014    source источник


Ответы (1)


Если вы хотите обновить объект, вы сначала извлекаете объект и обновляете его (либо в том же txn, либо отсоединяете его и обновляете, пока он отсоединен). Все это будет описано в спецификации JDO.

Например, https://db.apache.org/jdo/pm.html и page вниз до «Обновить объекты»

person DataNucleus    schedule 01.02.2014