【问题标题】:Spring JPATemplate DAO. DELETE Items from tableSpring JPATemplate DAO。从表中删除项目
【发布时间】:2011-08-21 13:07:50
【问题描述】:

新闻

@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;
    }

@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 提供交易。

但我不能使用查询抛出JpaTemplate。有什么想法吗?

【问题讨论】:

    标签: spring jpa dao


    【解决方案1】:

    事务管理器不会为手动创建的实体管理器启动事务。它只处理容器/弹簧管理的实体管理器。而且没有交易就无法删除。

    JpaTemplate 的 javadocs 建议您使用 JPA 样式的数据访问。所以用

    @PersistenceContext 
    private EntityManager entityManager;
    

    (查看 spring 文档以了解启用它所需的内容)。

    如果你真的想使用JpaTemplate,那么只使用它,不要获取底层工厂。

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-20
      • 2016-05-08
      • 2011-03-18
      • 1970-01-01
      相关资源
      最近更新 更多