1

JBoss と Hibernate を使用して Web アプリケーションをセットアップしようとしていますが、SQL データベースを実行できません。オブジェクトを永続化して、すぐにcontains()を呼び出すとtrue が返されますが、別のメソッドでこのオブジェクトを探していると、データベースが空になります。

私のpersistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="facePlace">
<non-jta-data-source>java:jboss/facePlace</non-jta-data-source>
<class>webtech2.faceplace.entities.Person</class>
<properties>
  <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
  <property name="hibernate.hbm2ddl.auto" value="update"/>
  <property name="hibernate.format_sql" value="true"/>
  <property name="hibernate.show_sql" value="true"/>
</properties>

関連するコード:

@Inject
@Persistence
EntityManager em;

public boolean signUp(String name,
      String password,
      String repeatPassword,
      Date birthdate,
      String gender) {
if (!password.equals(repeatPassword)) {
  return false;
}

log.info("person data: " + name + " " + password + " " + repeatPassword + " " + birthdate.toString() + " " + gender);

String saltedPassword = hashText + password;
String hashedPassword = generateHash(saltedPassword);
Person xperson = new Person(name, hashedPassword, birthdate, gender);
em.persist(xperson);
return true;
}

ここに @CommitAfter を追加しようとしましたが、同じエラーが発生し、getTransaction.begin() と getTransaction.commit() を呼び出して、

java.sql.SQLException: You cannot commit during a managed transaction!

私のエンティティは:

@Entity
public class Person implements Serializable {

private String name;
private Date birthdate;
private long id;
private String password;
private String gender;
private Set<Person> friends;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public long getId() {
  return id;
}

public void setId(long id) {
  this.id = id;
}

ログを確認すると、2 番目のメソッドが EntityManager にアクセスしようとしたときに発生する次の警告に気付きました。

HHH000436: Entity manager factory name (facePlace) is already registered.  If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'

これは正常ですか?私は何を間違っていますか?

4

1 に答える 1

0

いいえ、それは正常ではないと思います。

ただし、JBossを使用したことはないので、次の操作を行ったユーザーのみを 紹介できます。Jboss-5.1.0GA/JBoss-7.0.2を使用したTapestry5でのトランザクション処理

于 2012-07-19T08:44:30.350 に答える