Здраствуйте! Есть сущность
@Entity
@Table(name = "ItemsStore")
public class StoredItem implements Serializable {
public StoredItem(){}
public StoredItem(HistoryBuy item){
this.name=item.getName();
this.appID= Integer.parseInt(item.getApp_id());
this.author= PrivateCodes.getInstance().getAPI();
this.price= Double.parseDouble(item.getPrice());
this.itemID = item.getItem_id();
}
private static final long serialVersionUID = -1798070786993154676L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "name")
private String name;
@Column(name = "itemID")
private String itemID;
@Column(name="appID")
private int appID;
@Column(name = "author")
private String author;
@Column(name = "price")
private double price;
//getter and setters...
}
Получаю сущности из таблицы следующим образом.
public List<StoredItem> getIDSByName(String name) {
CriteriaBuilder cm = session.getCriteriaBuilder();
CriteriaQuery<StoredItem> storedItemCriteriaQuery = cm.createQuery(StoredItem.class);
Root<StoredItem> storedItemRoot = storedItemCriteriaQuery.from(StoredItem.class);
storedItemCriteriaQuery.select(storedItemRoot);
storedItemCriteriaQuery.where(cm.and(cm.equal(storedItemRoot.get("author"),this.author),cm.equal(storedItemRoot.get("name"),name)));
return session.createQuery(storedItemCriteriaQuery).getResultList();
}
Изменяю значения результата и использую в дальнейшем.
List<StoredItem> ids = service.getIDSByName(name);
ids.forEach(x->x.setPrice(x.getPrice()/(1.0-5.0/100)));
После повторного выполнения CriteriaBuilder приходят уже измененные данные. В таблице данные не меняются. Как правильно работать с результатом чтобы получать данные из таблицы, а не измененные в памяти?
При очистке сессии работает корректно.
public List<StoredItem> getIDSByName(String name) {
session.clear();
CriteriaBuilder cm = session.getCriteriaBuilder();
CriteriaQuery<StoredItem> storedItemCriteriaQuery = cm.createQuery(StoredItem.class);
Root<StoredItem> storedItemRoot = storedItemCriteriaQuery.from(StoredItem.class);
storedItemCriteriaQuery.select(storedItemRoot);
storedItemCriteriaQuery.where(cm.and(cm.equal(storedItemRoot.get("author"),this.author),cm.equal(storedItemRoot.get("name"),name)));
return session.createQuery(storedItemCriteriaQuery).getResultList();
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не получается сохранить токенВ файле preferences
Выскакивает ошибка при сборке проекта Error: Program type already present: comlaba2