Весенняя JPATemplate DAO.УДАЛИТЬ Предметы из таблицы - PullRequest
0 голосов
/ 21 августа 2011

Новости

@Entity
@Table(name = "NEWS")

@NamedQueries({
    @NamedQuery(name = "News.findAll", query = "SELECT n FROM News n"),
    @NamedQuery(name = "News.delete", query = "DELETE FROM News n WHERE n.newsId in(:ids)")
})

@GenericGenerator(name = "test-increment-strategy", strategy = "increment")
public class News implements Serializable {

    private static final long serialVersionUID = 3330980835510468207L;
    private Integer newsId;
    private String title;
    private String brief;
    private String content;
    private Date created;
    private String dateCreatedString;

    public News() {
    }

    @Id
    @Column(name = "NEWS_ID")
    // @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "news_seq")
    // @SequenceGenerator(name = "news_seq", sequenceName = "NEWS_SEQ")
    @GeneratedValue(generator = "test-increment-strategy")
    public Integer getNewsId() {
        return newsId;
    }

DAO

@Override
@Transactional(readOnly = false)
public void removeNews(List<Integer> listOfIdNewsForDeleting) throws DAOException {
    EntityManager entityManager = getJpaTemplate().getEntityManagerFactory().createEntityManager();

    Query query = entityManager.createNamedQuery("News.delete");
    query.setParameter("ids", listOfIdNewsForDeleting);
    int deleted = query.executeUpdate();
}

Это неудачная попытка удалить новость.

TransactionManager не дает транзакцию для нового EntityManager, который я вызываю.

Но я не могу использовать запрос throw JpaTemplate.Есть идеи?

1 Ответ

0 голосов
/ 21 августа 2011

Менеджер транзакций не запускает транзакции для менеджеров сущностей, созданных вручную. Он обрабатывает только менеджеры контейнеров / управляемых пружин. А без транзакции вы не можете удалить.

В javadocs JpaTemplate рекомендуется использовать доступ к данным в стиле JPA. Так что используйте

@PersistenceContext 
private EntityManager entityManager;

(проверьте документы пружины на предмет того, что вам нужно для его включения).

Если вы действительно хотите использовать JpaTemplate, используйте только его, и не получите базовую фабрику.

...