私はモデルを持っています:
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
しかし、データベースにクエリを実行しても、レコードはそこで更新されません。私は自分が間違っていることを理解していません。残りの呼び出しを行おうとしたときにIDを提供していますが、そのIDはデータベースに存在します。
save
を使用すると、変更はすぐにDBにフラッシュされる必要はなく、フラッシュまたはコミットコマンドが発行されるまで、メモリ内にとどまることがあります。
saveAndFlush
を使用すると、変更はすぐにDBにフラッシュされます。
ただし、トランザクションの変更をフラッシュしてコミットしない場合、このトランザクションでコミットするまで、変更は外部のトランザクションに表示されません。
BaseControllerで変更してみてください
return baseRepository.save(abc);
に
return baseRepository.saveAndFlush(abc);
同じ理由で誰かがここにいて答えが見つからなかった場合:
次のセットがあるか確認しましたか?おそらくスキーマ全体が再作成されているのでしょうか?
spring.jpa.hibernate.ddl-auto = create