[英]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.