Постоянство Java работает с чтением из базы данных, молча не удается вставить / обновить - PullRequest
0 голосов
/ 17 октября 2011

Я создал простой проект Java-приложения (Vaadin) с использованием JPA, и он работает для чтения сущностей из базы данных.Когда я пытаюсь использовать либо persist (), либо merge (), в базе данных ничего не происходит.При просмотре журналов есть запросы SELECT, но нет INSERT / UPDATE.

Я использую Glassfish 3.1 с определенным ресурсом JDBC, persistence.xml, чтобы использовать этот ресурс (JTA).Я использую файлы конфигурации по умолчанию, сгенерированные автоматически Eclipse.

Существует также другой аналогичный проект, выполненный кем-то другим, использующий тот же JTA, и эта проблема не возникает.Посмотрел его конфигурацию и не нашел ничего важного.

Оба проекта не используют транзакции.

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="MapperPersistence">
    <jta-data-source>mapper</jta-data-source>
         <class>pl.bdk.mapper.domain.jpaImpl.MappingImpl</class>
...
         <class>pl.bdk.mapper.domain.jpaImpl.UserImpl</class>
             <properties>
                 <property name="eclipselink.logging.level" value="FINE" />
             </properties>
    </persistence-unit>
</persistence>

Java-код

public class MappingService {
    public static int createMapping(String clientProductId, User user) {
        MappingImpl mapping = new MappingImpl();
        mapping.setUser(user);
        mappingDao.save(mapping);
        return mapping.getMappingId();
    }
}

...
public class MappingDao {
    public void save(MappingImpl mapping) {
        entityManager.persist(mapping);
    }
}

...
@Entity
@Table("t_mapping")
public class MappingImpl() {
    @Id
    @SequenceGenerator(name="T_MAPPING_MAPPINGID_GENERATOR", sequenceName="S_MAPPING_ID", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="T_MAPPING_MAPPINGID_GENERATOR")
    private Integer id;

    @ManyToOne
    @JoinColumn(name="user_id")
    private User user;

... getters and setters...
}

1 Ответ

0 голосов
/ 20 октября 2011

Хорошо, вопрос казался простым, но это не так.

Этот пост мне очень помог: Hibernate не сохраняет и не выдает исключения?

Прежде всего - JPA нужен какой-то механизм транзакций.Обычно он управляется снизу и не требует настройки.Это означает, что самый простой способ - создать проект EJB (Enterprise Java Bean), в который EntityManager будет вставлен с помощью @PersistenceContext.Если кто-то предпочитает создавать EntityManager локально (без EJB), механизм транзакций все еще должен быть предоставлен.Больше информации в посте выше.

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