加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用jpa / hibernate进行实体更新的问题

发布时间:2020-12-15 08:30:43 所属栏目:Java 来源:网络整理
导读:我有这个实体类,称为“Pagina”,我想根据对实体所做的更改来更新数据库中的条目.这不起作用.我没有错误,但数据库没有改变. @Entity@Table(name = "PAGINA")@NamedQueries({@NamedQuery(name = "Pagina.findAll",query = "SELECT p FROM Pagina p"),@NamedQue
我有这个实体类,称为“Pagina”,我想根据对实体所做的更改来更新数据库中的条目.这不起作用.我没有错误,但数据库没有改变.

@Entity
@Table(name = "PAGINA")
@NamedQueries({@NamedQuery(name = "Pagina.findAll",query = "SELECT p FROM Pagina p"),@NamedQuery(name = "Pagina.findHashByURL",query= "SELECT p.chash FROM Pagina p WHERE p.url = :url"),@NamedQuery(name = "Pagina.findTimestampByURL",query= "SELECT p.timestamp FROM Pagina p WHERE p.url = :url"),@NamedQuery(name = "Pagina.findByUrl",query = "SELECT p FROM Pagina p WHERE p.url = :url"),@NamedQuery(name = "Pagina.findByProfondita",query = "SELECT p FROM Pagina p WHERE p.profondita = :profondita"),@NamedQuery(name = "Pagina.findByIntervallo",query = "SELECT p FROM Pagina p WHERE p.intervallo = :intervallo"),@NamedQuery(name = "Pagina.findByTimestamp",query = "SELECT p FROM Pagina p WHERE p.timestamp = :timestamp"),@NamedQuery(name="Pagina.findAllURL",query="SELECT p.url FROM Pagina p"),@NamedQuery(name="Pagina.findDelayByURL",query="SELECT p.intervallo FROM Pagina p WHERE p.url = :url"),@NamedQuery(name = "Pagina.findByUpdated",query = "SELECT p FROM Pagina p WHERE p.updated = :updated")})
public class Pagina implements Serializable,Delayed{
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "URL")
    private String url;
    @Column(name = "PROFONDITA")
    private Integer profondita;
    @Column(name = "INTERVALLO")
    private Integer intervallo;
    @Lob
    @Column(name = "CHASH")
    private String chash;
    @Column(name = "TIMESTAMP")
    private Integer timestamp;
    @Column(name = "UPDATED")
    private Boolean updated;


[cut]

在另一个类中,我使用包含在实体上工作的方法的类中定义的方法来检索存储在数据库(mysql)中的对象.此方法使用查询“findAll”.方法的代码如下:

public List<Pagina> findAll(){
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("CrawlerPU");
        EntityManager em = emf.createEntityManager();  
List o = (List) em.createNamedQuery("Pagina.findAll").getResultList();
        return o;
    }

我正在使用此方法,您可以在代码中看到:

PaginaMethods p = new PaginaMethods();

        List<Pagina> l = p.findAll();
   while (it.hasNext()) {
            Pagina s = (Pagina) it.next();
            s.setUpdated(Boolean.TRUE);

如果我观看数据库,则此操作后没有任何变化.我的persistence.xml有条目“”
你能帮助我吗?我不知道如何解决这个问题……如果需要,我可以改变一些事情.

解决方法

可以将Hibernate看作是一个大缓存,它可以将数据库用作“存储”,它可以将不适合缓存的内容放入其中.当你更改它时,Hibernate不会将所有内容刷新到数据库,它会等待.有可能您可能会更改对象中的多个字段.

因此,您需要刷新会话(em.flush()),或者必须运行查询,或者必须提交当前事务(使用Spring时不是一个简单的选项).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读