2.4 ebean 업데이트 최적 잠금 재생
ebeans를 사용한 play 2.4를 사용하여 crud와 같은 컴퓨터 데이터베이스 예를 구현하려고 합니다.업데이트를 제외한 모든 것이 작동합니다.동일한 MariaDB 및 오래된 ebeans(3.2.2)에 대해 컴퓨터 데이터베이스 예를 실행하면 정상적으로 업데이트되므로 데이터베이스에 문제가 없는 것으로 보입니다.ebeans 사용 중 Maria JDBC 드라이버에 버그가 발견되어 MySQL 커넥터를 사용하고 있습니다.
다음 코드:
/**
* Handle the 'edit form' submission
*
* @param id Id of the user to edit
*/
public Result update(Long id) {
Form<User> userForm = form(User.class).bindFromRequest();
if(userForm.hasErrors()) {
return badRequest(editForm.render(id, userForm));
}
User userFromForm = userForm.get();
System.out.println(userForm.data());
userFromForm.update();
flash("success", "User " + userForm.get().alias + " has been updated");
return GO_HOME;
}
는 다음 오류를 나타냅니다.[ Optimistic Lock Exception : ]데이터가 변경되었습니다.[0] 행 sql[update user set alias=?, e-메일=?, password=?, active=?, last_update=?, user_type_id=?를 업데이트하시겠습니까?id=?] bind[bind]
엔티티는 다음과 같이 정의됩니다.
@엔티티 퍼블릭 클래스 사용자가 모델 {을(를) 확장
private static final long serialVersionUID = 1L;
@Id
public Long id;
@Constraints.Required
public String alias;
@Constraints.Required
public String email;
@Constraints.Required
public String password;
@Constraints.Required
public char active;
@ManyToOne
public UserType userType;
@Version
@Column(columnDefinition = "timestamp default '2014-10-06 21:17:06'")
public Timestamp lastUpdate;
첫째, 버전이 예상대로 where 구에 배치되어 있지 않습니다.또, 낙관적인 잠금 에러가 발생한다.
MySQL에 접속 중입니다.저장, 삭제 등의 다른 모든 조작은 정상적으로 동작합니다.이거 또 고장 났나요?
플러그인은
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.4")
// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-web" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-webdriver" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-js-engine" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.0.6")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0")
// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using
// enablePlugins(SbtEbean). Note, uncommenting this line will automatically bring in
// Play enhancer, regardless of whether the line above is commented out or not.
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0")
//Eclipse
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
build.buildt는
name := """mecamu-play"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean, SbtWeb, PlayEnhancer)
scalaVersion := "2.11.6"
libraryDependencies ++= Seq(
javaJdbc,
cache,
javaWs
)
// Play provides two styles of routers, one expects its actions to be injected, the
// other, legacy style, accesses its actions statically.
routesGenerator := InjectedRoutesGenerator
k in run := true
fork in run := true
어떤 도움이라도 주시면 감사하겠습니다.예전처럼 ebean에서 bound form update를 사용하고 싶습니다.정말 감사합니다.
Optimistic Lock Exception이 의미하는 것은 update 문이 0 행을 업데이트했다는 것입니다.즉, where 구가 기존 행과 일치하지 않습니다.즉, ID 및 버전 열(여기서 id=? 및 version=)에 대한 특정 바인딩 값을 확인해야 합니다.
Ebean 로그인이 있는 경우(http://ebean-orm.github.io/docs/setup/logging) 참조), 로그에는 바인드 값이 포함됩니다.
업데이트의 where 절에서 사용되는 바인드 값을 알게 되면 그 값이 올바르지 않은 이유(왜 0 행이 갱신되는가)를 판별할 필요가 있습니다.따라서 이 형식을 사용하여 빈에 어떤 값을 설정할 수 있는지 확인합니다.
내게는 당신이 따라야 할 단계입니다.
PS: Stackoverflow에서 문제를 기록한다고 해서 적절한 사람이 문제를 보는 것은 아닙니다.Playframework와 Ebean 모두 도움을 받을 수 있는 포럼이 있습니다.
이것은 ebeans 4.6.2 https://github.com/playframework/play-ebean/issues/44의 버그일 가능성이 있습니다.4.7.2 이후처럼 문제가 해결된 최신 버전을 사용할 수 있는지 알아보겠습니다.Play는 현재 ebeans 플러그인 모델을 사용하고 있기 때문에 어떤 버전을 불러올지 잘 모르겠습니다.나는 scala/sbt에 꽤 익숙하지 않다.4.6.2의 이 버그는 이전 버전이 정상적으로 업데이트되는 이유를 설명합니다.
하거나 1.sql 을 참조하십시오.describe your_table
하지 않는 하고 동일한 SQL을
언급URL : https://stackoverflow.com/questions/34158774/play-2-4-ebean-update-optimistic-locking
'programing' 카테고리의 다른 글
시제품 유전의 이점은 고전적인 것에 비해 무엇입니까? (0) | 2022.11.07 |
---|---|
PDO 데이터베이스 쿼리를 디버깅하는 방법 (0) | 2022.11.07 |
삽입된 ID를 TypeORM & NestJS raw 쿼리: wait connection.manager와 함께 반환합니다.쿼리('삽입처') (0) | 2022.10.30 |
Python: 문자열에서 클래스 속성에 액세스합니다. (0) | 2022.10.30 |
FileReader와 BufferedReader를 모두 닫아야 합니까? (0) | 2022.10.30 |