java我们如何用hibernate更新实体的所有引用?
是否有任何方法可以随时更新hibernate加载到我们程序中的实体的所有引用
例如,我在A类中加载了id为“1”的产品,并在B类中更改了id为“1”的相同产品的新加载。但在A类中没有更改。 我该怎么解决这个问题
这是代码的一部分: 产品类别:
@Entity
@Table(name = "t_product")
public class Product {
@Setter(AccessLevel.NONE)
@Id @GeneratedValue @Column(name = "ID")
private int id;
...
@ElementCollection
@OneToMany(targetEntity = SellerIntegerMap.class,
fetch = FetchType.EAGER,
cascade = CascadeType.ALL)
@JoinTable(name = "t_product_stock")
private List<SellerIntegerMap> stock;
...
}
SellerIntegerMap:
@Entity
@Table(name = "t_map")
public class SellerIntegerMap{
@Setter(AccessLevel.NONE)
@Id @GeneratedValue
private int id;
@ManyToOne
@JoinColumn(name = "SELLER")
private Seller seller;
@Column(name = "INTEGER_VALUE")
private Integer integer;
}
数据库管理员:
public class DBManager {
public static <T> T load(Class<T> type, Serializable serializable){
Session session = HibernateUtil.getSession();
session.beginTransaction();
T object = session.get(type,serializable);
if (object == null){
}
session.evict(object);
session.getTransaction().commit();
return object;
}
public static void save(Object object){
Session session = HibernateUtil.getSession();
session.beginTransaction();
session.saveOrUpdate(object);
session.getTransaction().commit();
}
}
而测试:
public void test(){
Product product = DBManager.load(Product.class,1);
Product productDup = DBManager.load(Product.class,1);
List<SellerIntegerMap> list = productDup.getStock();
list.get(0).setInteger(25);
DBManager.save(productDup);
}
数据在SQL表中更新,但不在“product”中更新,后者是与“productDup”相同的实体。我怎样才能解决这个问题?有没有办法在程序中解决这个问题,而不是每次我们需要数据时都加载它们
# 1 楼答案
你需要在整个操作过程中进行一次交易。这样,Hibernate将只保留该实体的一个托管实例