gpt4 book ai didi

java - JPA:正确保留 ManyToOne 实体

转载 作者:行者123 更新时间:2023-11-30 08:07:10 24 4
gpt4 key购买 nike

我已经寻找了一个多星期来解决我的问题,但没有得到任何明确的结果,尽管这似乎是一个基本问题。如果我做错了什么或者有什么误解,请告诉我。

情况如下:

用户连接到平台进行交易。所以我在用户和交易实体之间有多对一的关系。(一个用户进行多笔交易,每笔交易仅由一个用户进行)

这个想法是,当我持久化一个新的“交易”时,平台当前用户的 UserId 将作为交易表的外键。

问题是:

  1. 当我尝试保留新的“交易”时,也会出现一个新的“用户”使用新的 UserId 创建。

  2. 我不知道如何正确获取要添加的当前用户的 ID它在事务表中

这是我的代码:

交易实体:

@Entity
public class Transaction implements Serializable{

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
int idTransaction;

@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="FK_User")
User user;

}

用户实体:

@Entity
public class User implements Serializable{

int idUser;

@OneToMany(mappedBy="user")
Set<Transaction> transactions;
}

我的 ManagedBean 方法 doTransaction:

public String doTransaction(){

String navigateTo="/pages/expediteur/succes";

transaction.setExpediteur(expediteur);
transactionServiceLocal.updateTransaction(transaction);

return navigateTo;
}

希望我的解释清楚而简短。

* 编辑*

感谢您的帮助,我已尝试实现评论中提到的解决方案,但现在出现此错误:

ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-46) Cannot add or update a child row: a foreign key constraint fails 

当我将这些行添加到我的代码中时:

System.out.println("The current user is "+user.getIdUser());
System.out.println("Your current transaction is "+user.getIdTransaction());

我为所有实体获得 0 作为返回。

我认为我的问题是正确获取数据库中存储的实体。

最佳答案

假设您有权访问用户 ID:

public Transaction createAndPersistTransaction(Long userId) {
// get a reference to the given user:
User user = em.getReference(User.class, userId);
// create a transaction
Transaction tx = new Transaction();
// set its user:
tx.setUser(user);
// persist it
em.persist(tx);
return tx;
}

关于java - JPA:正确保留 ManyToOne 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com