Метод Spring Data JPA .save () не сохраняется в базе данных - PullRequest
0 голосов
/ 01 октября 2018

У меня есть модель:

public class ABC implements Serializable {
    private int baseId;
    private Integer aId;
    private Integer bId;
    private Boolean isReal;
    private TimeStamp updateTime;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "base_id", nullable = false)
    public int getBaseId() {
        return baseId;
    }
    public void setBaseId(int baseId) {
        this.baseId = baseId;
    }

    @Basic
    @Column(name = "a_id", nullable = false)
    public Integer getAId() {
        return aId;
    }

    public void setAId(Integer aId) {
        this.aId = aId;
    }

    @Basic
    @Column(name = "b_id", nullable = false)
    public Integer getBId() {
        return bId;
    }

    public void setBId(Integer bId) {
        this.bId = bId;
    }
    @Basic
    @Column(name = "is_real")
    public Boolean getIsReal() {
        return isReal;
    }

    public void setIsReal(Boolean isReal) {
        this.isReal = isReal;
    }

    @Basic
    @Column(name ="update_time")
    public Timestamp getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Timestamp updateTime) {
        this.updateTime = updateTime;
    }
}

У меня есть контроллер Класс:

@RestController
@RequestMapping(path = "${serverconfig.api-base-path}/base")
public class BaseController {
    /**
     * Instance of an logger
     */
    private static final Logger LOG = 
        LoggerFactory.getLogger(BaseController.class);

    /**
     * Base repository
     */
    private BaseRepository baseRepository;

    /***
     *
     * @param baseRepository
     */
    public BaseController(BaseRepository baseRepository) {
        LOG.trace("BaseRepository constructor method.");
        this.baseRepository = baseRepository;
    }

    @PostMapping(path = Route.UPDATE_IS_REAL)
     // @Transactional
    public ABC updateIsReal(@Valid @RequestBody 
    @RequestParam("baseId") int baseId,

    @RequestParam("isReal") boolean isReal){
        ABC abc = baseRepository.findByBaseId(baseId);
        Date date= new Date();
        Timestamp ts = new Timestamp(date.getTime());
        abc.setBaseId(baseId);
        abc.setIsReal(isReal);
        abc.setUpdateTime(ts);

        return baseRepository.save(abc);

    }

}

Мой класс хранилища:

 @Repository
 public interface BaseRepository extends 
 JpaRepository<ABC, Integer> {

    List<ABC> findByAId(Integer aId);

    ABC findByBaseId(Integer baseId);
}

В таблице базы данных есть запись:

"base_id": 1,
"a_Id": 1,
"b_Id": 1,
"is_real": null,
"update_time": null

Когда я вызываю конечную точку, она не выдает ошибку и возвращает:

"base_id": 1,
"aId": 1,
"bId": 1,
"isReal": yes,
"updateTime": 018-10-01T18:30:56.765+0000

Но когда я запрашиваю базу данных, запись там не обновляется.Я не понимаю, что я делаю неправильно.Я предоставляю идентификатор, когда я пытаюсь сделать повторный вызов, и этот идентификатор существует в базе данных.

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Если кто-то был здесь по той же причине и не нашел ответа ..:

Вы проверяли, есть ли у вас следующий набор?Возможно, вся схема может быть воссоздана?

spring.jpa.hibernate.ddl-auto = create

0 голосов
/ 01 октября 2018

При save изменения не обязательно будут немедленно сбрасываться в БД и могут оставаться только в памяти, пока не будут выполнены команды очистки или фиксации.

При saveAndFlush изменения будут сброшены в БДнемедленно.

Однако, если вы сбрасываете изменения в транзакции и не фиксируете их, изменения по-прежнему не будут видны внешним транзакциям до момента фиксации в этой транзакции.

В вашемBaseController попробуйте изменить

return baseRepository.save(abc);

на

return baseRepository.saveAndFlush(abc);

Дополнительная информация здесь и здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...