簡體   English   中英

使用jpa / hibernate更新實體的問題

[英]Problem with Entity update with jpa/hibernate

我有一個稱為“ 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視為一個大型緩存, 可以將DB用作“存儲”,從而將不再適合的內容放入該緩存中。 更改時,Hibernate不會將所有內容刷新到數據庫,而是會等待。 您可能會更改一個對象中的多個字段。

因此,您需要刷新會話( em.flush() ),或者必須運行查詢,或者必須提交當前事務(使用Spring時,這不是一個簡單的選擇)。

設置屬性的值時,更改不會立即刷新到數據庫。 它在事務提交時(或在某些情況下更早)發生。 嘗試提交事務,然后檢查數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM