2015-01-23 11 views
0

데이터베이스 문제가 있습니다. 아래의 컨트롤러에서 전달 된 ID를 가진 레코드에서 부울을 토글하려고합니다. ebean 구문을 사용할 때 쿼리, 삽입 및 삭제할 수 있지만 업데이트 할 수는 없습니다. 마치 업데이트에 대한 트랜잭션을 커밋 할 수없는 것처럼 보이지만 다른 작업과 함께 자동 커밋됩니다. JPA 구문을 사용하면 구성된 postgresql 대신 메모리 내장 데이터베이스와 상호 작용하는 것처럼 보입니다. 내가 쿼리 할 때 나는 null을 반환하기 때문에 그렇게 말합니다. 그러나 JPA를 사용하여 레코드를 삽입하면 나중에 성공적으로 쿼리하고 업데이트 할 수 있습니다. 그러나 이러한 업데이트는 포스트 그레스에 나타나지 않으며 쿼리 한 레코드에 설정된 유일한 필드는 id 및 boolean 플래그입니다.재생 2.3.x에서 ebean 및 jpa와 다른 실패

여기 내 코드 및 구성입니다. 고맙습니다!

에서 build.sbt org.hibernate.ejb.HibernatePersistence

의 persistence.xml DefaultDS에서 application.conf

# Database configuration 
# ~~~~~ 
db.default.driver=org.postgresql.Driver 
db.default.url="postgres://username:[email protected]/playdb" 
db.default.autocommit=true 

# You can expose this datasource via JNDI if needed (Useful for JPA) 
db.default.jndiName=DefaultDS 

jpa.default=defaultPersistenceUnit 

# Ebean configuration 
# ~~~~~ 
ebean.default="models.*" 

에서

libraryDependencies ++= Seq(
    javaJdbc, 
    javaEbean, 
    javaJpa, 
    "org.hibernate" % "hibernate-entitymanager" % "4.3.6.Final", 
    "play2-crud" %% "play2-crud" % "0.7.4-SNAPSHOT", 
    cache, 
    javaWs, 
    "javax.mail" % "javax.mail-api" % "1.5.2", 
    "javax.activation" % "activation" % "1.1.1", 
    "postgresql" % "postgresql" % "9.1-901-1.jdbc4" 
) 

,617,451

내 컨트롤러

// JPA style 
@Transactional 
public static Result toggleMailboxJpa(Long mailbox) 
{ 
    // does not update 
    MailboxConfig x = JPA.em().find(MailboxConfig.class, mailbox); 
    x.suspended = !x.suspended; 

    // transactional appears to work, these have no effect 
    JPA.em().persist(x); 
    JPA.em().flush(); 

    return redirect("/admin/mailboxStatus"); 
} 

@Transactional 
public static Result toggleMailboxEbean(Long mailbox) 
{ 
    MailboxConfig x = MailboxConfig.find.byId(mailbox); 
    x.suspended = !x.suspended; 
    x.update(); 

    // this syntax has the same effect (reads from the db fine but does not commit) 
    /* 
    MailboxConfig x = Ebean.find(MailboxConfig.class).where().eq("id", mailbox).findUnique(); 
    x.suspended = !x.suspended; 
    Ebean.save(x); 
    */ 

    return redirect("/admin/mailboxStatus"); 
} 

답변

0

에서 "사서함"아이디

+0

inot 문제를 해결할 경우,이 모델을 볼 수와

x.update(mailbox) 

을 시도? –