JDO и Cloud SQL актуализират обекти с makePersistentAll

Използвам google cloud SQL с JDO. Когато се опитвам да използвам JDO PersistenceManager за съхраняване на нови обекти с нов ключ, той работи добре, но получавам грешка, когато се опитвам да актуализирам обекти, които вече са вмъкнати в db:

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 и страница до „Актуализиране на обекти“

person DataNucleus    schedule 01.02.2014