EntityManager.persist(Object)
メソッドの使用に問題があります。今私が他の問題を取り除くとき、例外なしのアプリの仕事によって、オブジェクトは私のデータベースに入れられません。
私のエンティティクラス:
@Entity
@Table(name ="Chain")
public class Chain implements Serializable{
@Id
@Column(name = "id")
private Long id;
@Column(name = "date")
private Date date;
@Column(name = "name")
private String name;
//setters and getters
}
私のdaoクラス:
@Transactional
@Repository("ChainDao")
public class ChainDaoImpl implements ChainDao{
private EntityManager em;
@PersistenceContext
public void setEntityManager(EntityManager em) {
this. em = em;
}
public int saveChain(Chain chain) {
chain.setDate(new Date());
chain.setId((long)44);
Boolean a;
em.persist(chain);
return 222;
}
}
私のxmlコンテキスト:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property></bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
およびpereistence.xml
:
<persistence xmlns="http://Java.Sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="sample">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<properties>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/database"/>
<property name="hibernate.connection.username" value="postgres"/>
<property name="hibernate.connection.password" value="pwd"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
私は何が欠けているのか誰かが知っていますか?
特定の例外が発生していますか?あなたがそうであるならば、それが何であるかを知ることは役に立ちます。
Stackoverflowにはすでにこれと同様の問題がいくつかあります。
Springトランザクションコンテキストはデータを保持しません
Spring、Hibernate、JPA:entitymanagerでpersistを呼び出すと、データベースにコミットされないようです
これらは、em.flush()
の後にem.persist(chain)
を追加して、@transactional
アノテーション
また、次のような行を通じてトランザクション注釈が有効になっていることを確認する必要があります。
<tx:annotation-driven transaction-manager="transactionManager"/>
.xml構成
これを試して:
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
PS:IDの生成方法も設定する必要があります。
どのような例外が発生していますか?あなたのエラーは、あなたの「チェーン」オブジェクトを指定していないpersistence.xmlであると私は思います。
このタグを使用して指定できます
<exclude-unlisted-classes>false</exclude-unlisted-classes>
あるいは単に
<class>your.package.Chain</class>
これをproviderタグの上に置きます。
また、@ Idとしてタグ付けされた列には番号を設定しないでください
値が設定されたId列でメソッドsave()を使用すると、Hibernateは[〜#〜] update [〜#〜]データを挿入しようとしません。
これを行う:getEntityManagerメソッドを作成する
public EntityManager getEntityManager() {
return entityManager;
}
その後
@Transactional
public void saveChain(Chain chain) {
chain.setDate(new Date());
getEntityManager().persist(chain);
}
AppConfig構成ファイルのヘッダーで@EnableTransactionManagementを使用する
これらをweb.xml
に追加すると、この問題が解決する場合があります。
<!-- Open Entity Manager in View filter -->
<filter>
<filter-name>openEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
新しいトランザクションを開いて、レコードをコミットできます。
@PersistenceUnit(unitName = "NameOfPersistenceUnit")
private EntityManagerFactory entityManagerFactory;
void someMethod(AccountCommodity accountCommodity){
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist(accountCommodity);
entityManager.flush();
entityManager.getTransaction().commit();
entityManager.close();
}
を使用して私の問題を解決しました
org.springframework.transaction.jta.JtaTransactionManager
この作品を願っています!