Интеграция JPA2.0 и Spring - PullRequest
       12

Интеграция JPA2.0 и Spring

1 голос
/ 02 августа 2010

последние несколько часов я пытаюсь протестировать с помощью Spring jpa 2.0 3.0 Наконец, я смог восстановить сохраненные объекты, но когда я пытаюсь сохранить новый объект, я получаю следующее сообщение об ошибке:

org.springframework.dao.InvalidDataAccessApiUsageException: транзакция не выполняется;вложенное исключение - javax.persistence.TransactionRequiredException: в org.springframework.orm.jpa не выполняется транзакцияjava: 102) в org.springframework.dao.support.DataAccessUtils.translateIfNeeded (DataAccessUtils.java:213) в org.springframework.orm.jpa.JpaAccessor.translateIfNe Необходимый (JpaAccessor.java:15ing.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapa.rapararara.rag.rag org.JpaTemplate.execute (JpaTemplate.java:188) в org.springframework.orm.jpa.JpaTemplate.flush (JpaTemplate.java:288) в myPackage.testDAO.create (testDAO.java:33) в myPackage.Main.main (Main.java:27) Вызвано: javax.persistence.TransactionRequiredException: транзакция не выполняется в org.hibernate.ejb.AbstractEntityManagerImpl.flush (AbstractEntityManagerImpl.java:789) в sun.reflect.NativeMethodAccessorImp0суn.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.refrajt.jpg.orm.jpa.ExtendedEntityManagerCreator $ ExtendedEntityManagerInvocationHandler.invoke (ExtendedEntityManagerCreator.java:365) в $ Proxy21.flush (Неизвестный источник) в org.springframework.orm.jpa.JpaTemplate $ 8.doInJmpf.jpg в jpa (jpa) jpg (jpag).orm.jpa.JpaTemplate.execute (JpaTemplate.java:183) ... еще 3

мой объектный компонент:

@ Открытый класс Entity Application реализует Serializable {private static finallong serialVersionUID = 1L;

@Id
@Column(name="ID_APPLICATION")
private long idApplication;

@Temporal( TemporalType.DATE)
@Column(name="DATE_LIVRAISON")
private Date dateLivraison;

@Lob()
private String description;

@Column(name="NOM_APPLICATION")
private String nomApplication;

private String url;

//bi-directional many-to-one association to Test
@OneToMany(mappedBy="application")
private List<Test> tests;

public Application() {
}

public long getIdApplication() {
    return this.idApplication;
}

public void setIdApplication(long idApplication) {
    this.idApplication = idApplication;
}

public Date getDateLivraison() {
    return this.dateLivraison;
}

public void setDateLivraison(Date dateLivraison) {
    this.dateLivraison = dateLivraison;
}

public String getDescription() {
    return this.description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getNomApplication() {
    return this.nomApplication;
}

public void setNomApplication(String nomApplication) {
    this.nomApplication = nomApplication;
}

public String getUrl() {
    return this.url;
}

public void setUrl(String url) {
    this.url = url;
}

public List<Test> getTests() {
    return this.tests;
}

public void setTests(List<Test> tests) {
    this.tests = tests;
}

}

мой репозиторий:

@ Открытый класс репозитория testDAO расширяет JpaDaoSupport, реализующий ItestDAO {@PersistenceContext private EntityManager em;

public List<Application> findALL() {
    // TODO Auto-generated method stub
    return null;
}

public Application findById(long id) {
    // TODO Auto-generated method stub
    return getJpaTemplate().find(Application.class, id);
}

public void create(Application application) {
    getJpaTemplate().persist(application);
}

}

Метод findById работает нормально (что заверяет меня, что конфигурация jpaверно), но когда я запускаю метод создания, я получаю сообщение об ошибке выше.

ApplicationContext context=new ClassPathXmlApplicationContext("application-context.xml");
    testDAO dao=(testDAO)context.getBean("dao");
    Application application=new Application();
    application.setIdApplication(2);
    application.setUrl("url");
    application.setDescription("description");
    application.setNomApplication("dsdsds");
    dao.create(application);

любая помощь приветствуется Спасибо за вашу помощь

1 Ответ

3 голосов
/ 02 августа 2010

Короче говоря, методы EntityManager, такие как persist, remove, merge должны бытьвызывается внутри транзакции, отсюда и сообщение об ошибке, которое на самом деле самоочевидно:

javax.persistence.TransactionRequiredException: no transaction is in progress

Spring обеспечивает поддержку управления транзакциями (см. ссылки ниже), в том числе при написании тестов ... если вы используете один из Springкласс тестирования, обеспечивающий поддержку транзакций .

См. также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...