2012-05-14 1 views
0

모든 값을 확인한 상태에서 모든 값을 확인한 상태에서 다음과 같은 JPA 코드가 있습니다 (ticket은 유효한 bean을 포함하고 예외없이 끝납니다.). 실행되었지만 예외를 throw하지 않습니다. end 테이블에 데이터가 기록되지 않습니다.JPA가 테이블에 쓰지 않습니다.

또한 테이블에서 bean을 검색하려고 시도 했는데도 "작동"합니다 (빈 상태이므로 아무런 데이터도 반환되지 않습니다).

public String saveTicket() { 
    System.out.println("Controller saveTicket() "); 
    EntityManagerFactory factory = Persistence.createEntityManagerFactory("GesMan"); /* I know it would be better to share a single instance of factory, this is just for testing */ 
    EntityManager entityMan = factory.createEntityManager(); 
    entityMan.persist(this.ticket); 
    entityMan.close(); 
} 
:

셋업은

  • 보스 6.1 최종

  • 의 SQLServer 2008 익스프레스 (MS에서 드라이버 SQL JDBC 3)

지속성 코드

퍼시스턴스 유닛 그렇지 않으면 모든 변경에 가까운 대기 버릴 것이다

<?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="GesMan" transaction-type="JTA"> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <jta-data-source>java:/GesManDS</jta-data-source> 
    <class>es.caib.gesma.gesman.Ticket</class> 
    <properties> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/> 
     <property name="hibernate.transaction.manager_lookup_class" 
     value="org.hibernate.transaction.JBossTransactionManagerLookup"/> 
     <property name="hibernate.show_sql" value="true"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

데이터 소스

<datasources> 
    <local-tx-datasource> 
    <jndi-name>GesManDS</jndi-name> 
    <connection-url>jdbc:sqlserver://spsigeswnt14.caib.es:1433;DatabaseName=TEST_GESMAN</connection-url> 
    <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class> 
    <user-name>thisis</user-name> 
    <password>notthepassword</password> 
    <check-valid-connection-sql>SELECT * FROM dbo.Ticket</check-valid-connection-sql> 
    <metadata> 
     <type-mapping>MS SQLSERVER</type-mapping> 
    </metadata> 
    </local-tx-datasource> 
</datasources> 

답변

0

결국 내가 잘못된 접근법을 사용하고있는 것처럼 보입니다. JBoss에서는 JSE에서와 같이 직접 JPA에 액세스 할 수 없습니다.

트랜잭션을 사용하여 EJB를 만들고 거기에서 모든 JPA 논리를 전달하는 작업이 끝났습니다.

PS : 내가 잘못 물론, 경우에 저를 (지금은 학술 문제를 더하지만, 아직도 내가 알고 싶은)

0

entityMan.flush() 나 닫을 befor을 transaction.commit()이다.

+0

플러시는 트랜잭션 내부 될 필요가 있다고 말해 예외를 발생 알려주세요 ; 수동으로 트랜잭션을 시작할 수 없었습니다 (EJB를 설정하고 컨테이너가 작동하도록해야했습니다). – SJuan76

+0

어떻게 트랜잭션 관리를 구성 했습니까? 그것은 컨테이너 관리 또는 빈 관리입니까? – kyiu