gpt4 book ai didi

java - jpa/hibernate 的实体更新问题

转载 作者:可可西里 更新时间:2023-11-01 07:55:18 25 4
gpt4 key购买 nike

我有这个名为“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 不会将所有内容刷新到数据库,它会等待。您可能会更改一个对象中的多个字段。

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

关于java - jpa/hibernate 的实体更新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1328935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com