我有一个PSU实体:
@Entity
public class Psu extends PanacheEntityBase {
@Id
@GeneratedValue
public UUID uuid;
@Column(nullable = false, length = 50)
public String username;
public Integer coins;
public String firebaseRegistrationToken;
public void setCoins(int coins){
this.coins = coins;
}
public int getCoins(){
return coins;
}
public static Psu findByUsername(String username){
return find("username", username).firstResult();
}
}
@Transactional
public Transaction changeBalance(Transaction transaction){
Psu psuSender = Psu.findById(transaction.senderId);
psuSender.coins = psuSender.coins - transaction.amount;
Psu.persist(psuSender);
transaction.status = TransactionStatus.PROCESSED;
return transaction;
}
List<Psu> allPsu = Psu.findAll().list();
for(Psu psu : allPsu){
System.out.println("ID: " + psu.uuid + " coins: " + psu.coins);
}
@GET
@Path("psu/getBalance/{uuid}")
@Produces(MediaType.APPLICATION_JSON)
public String getBalanceById(@PathParam("uuid") UUID uuid) {
List<Psu> allPsu = Psu.findAll().list();
for(Psu psu : allPsu){
System.out.println("ID: " + psu.uuid + " coins: " + psu.coins);
}
return gson.toJson(psuService.getBalanceById(uuid));
}
@Transactional
public int getBalanceById(UUID uuid){
Psu psu = Psu.findById(uuid);
return psu.getCoins();
}
Psu.update("coins = ?1 where id= ?2", 10, transaction.senderId);
我收到错误:
ERROR [io.qua.sch.run.SimpleScheduler] (executor-thread-1) Error occured while executing task for trigger IntervalTrigger [id=1_com.msp.sqs.MessageQueue_ScheduledInvoker_receiveMessages_e721e20dd5fdaa8a94c141
a7768b0311d6f32352, interval=1000]: javax.persistence.TransactionRequiredException: Executing an update/delete query
我认为它没有更新,因为您正在对现有实体使用persist
。因为实体是托管的并且存在,所以可以通过以下方式更改代码:
@Transactional
public Transaction changeBalance(Transaction transaction){
Psu psuSender = Psu.findById(transaction.senderId);
psuSender.coins = psuSender.coins - transaction.amount;
// Psu.persist(psuSender); <-- Remove this
transaction.status = TransactionStatus.PROCESSED;
return transaction;
}
由于实体处于托管状态,在提交事务时更改将传播到数据库。
我有一个批处理过程,它正在为一组实体重新计算数据。通过Hibernate从DB获取实体列表: 当流程运行时,某些实体似乎正在分离,导致两种症状: 当尝试获取惰性数据时,我得到一个异常: 在我的第一次尝试中,我试图通过调用inside
我想这可能是一个新手问题,但我仍然想知道一些答案。 假设存在实体:医院和医生(多对多)。假设在我的controller类中,我必须获取所有现有的医生和医院,然后在特定的医院雇佣一名医生 它当然不起作用,因为--据我所知--我已经在控制器中获取了所有的医生和医院,然后在hireDoctor方法中,我们打开了传递常规Java对象的trasaction,这些对象不在会话中。 我知道,我可以用一个特殊的身
以下是我要保存(创建/更新)的实体模型: 有两种方法可以更新此实体: < li >第一个更新除< code>notified属性以外的所有属性的人 < li >第二个更新< code>notified属性的仅 有没有办法告诉Hibernate忽略某个特定方法的某些字段?我需要创建两个不同的特定dao方法吗?我是否需要为经典的< code>save方法保留< code>updatable=false
我实现了两个 entites。规则实体和 RestCall 实体如下所示: RuleEntity RestCallEntity 我在 json 终结点中收到一条规则。比我将收到的 json 规则转换为规则实体并调用 当我只是更改规则的名称时,更新工作正常。但是当我更改它的名称时,它看起来像Hibernate尝试创建一个新的重新调用,即使它已经有一个ID。我得到以下异常。 原因:ruleentity
我在hibernate search 6中使用elasticsearch时遇到了问题。让我们假设我们有这样的设置: } } 当我第一次持久化EntityA(即被索引的实体)时,EntityB作为EntityA的子实体持久化在elasticsearch索引中。这是可以的。当我直接编辑EntityB并对其进行更改时,问题出现了,这种更改没有传播到elasticsearch索引。我错过了什么吗? 更新1
我有遗产数据库。 表内容有一个PK列。siteId列不是PK的一部分。表程序有两个PK列(siteId、code)。它是复合PK。此表用作模板。程序中唯一的变量是parameter,它位于表内容的prog_param列上。 作为代码 但这不是工作。Hibernate引发“实体映射中重复列”异常。 所以我研究了一些解决方案。最后,我发现这个'Republic column in mapping fo