Spring JDO - makePersistent не возвращает созданный объект - PullRequest
2 голосов
/ 13 ноября 2011

Я использую Spring и JDO для подключения к базе данных MySQL. Когда я сохраняю объект, я ожидаю увидеть созданный объект, возвращенный методом makePersistent(). Он возвращает объект, но у этого объекта есть только идентификатор вновь созданного объекта. Все остальные поля, которые были сохранены, теперь имеют значение null.

В приведенном ниже примере кода я вставляю значение 12 с помощью carouselNumber. Возвращаемому объекту присваивается значение NULL, а для идентификатора используется только что созданное значение идентификатора из базы данных.

Я использовал JDOHelper.getObjectState() и обнаружил, что мой объект находится в переходном состоянии.

Мне интересно, есть ли какая-то аннотация, которой мне не хватает, чтобы сказать JDO, чтобы она возвращала все значения объекта, а не только недавно созданный идентификатор.

EDIT: Я провел дальнейшие исследования и обнаружил, что когда я использую сырой API Datanucleus JDP, это прекрасно работает. Проблема возникает только тогда, когда я использую шаблон Spring JDO. Я действительно хотел бы понять, почему это отличается. Спасибо

Заранее спасибо,

Брайан.

@PersistenceCapable(table = "CAROUSEL", identityType = IdentityType.APPLICATION)

public class Carousel {

    @PrimaryKey(column = "ID")
    @Persistent(valueStrategy = IdGeneratorStrategy.INCREMENT)
    private Long id;

   @Column(name = "CAROUSEL_NUM")
    private int carourselNumber;

......

public class CarouselDAOImpl extends JdoDaoSupport implements ICarouselDAO {

  public Carousel insert(Carousel carousel) {
    return getJdoTemplate().makePersistent(carousel);
   }

.....

1 Ответ

0 голосов
/ 13 ноября 2011

Метод makePersistent изменяет объект carousel, который вы передали, для генерации идентификатора, поэтому ему не нужно ничего возвращать. Просто сделайте ваш метод недействительным и используйте переданную вами карусель.

...