programing

2.4 ebean 업데이트 최적 잠금 재생

firstcheck 2022. 10. 30. 22:26
반응형

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

반응형