gpt4 book ai didi

java - 如何实现本例中的实体转换器?

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:54 26 4
gpt4 key购买 nike

我有来自数据库的实体类,其中一个是连接表,其中有

@JoinColumn(name = "fk_game_id", referencedColumnName = "game_id")
@ManyToOne(optional = false)
private Game fkGameId;

我想将 Game fkGameId(在它自己的表中是 Integer)转换为整数,这样我就可以制作像

这样的构造函数

public PlayerGame(Integer id, Integer fkGameId, Integer fkPlayerId){ ... }

我的问题是如何做到这一点?互联网上的例子对我来说是黑魔法,我正在看这个例子link here但我不知道我必须在哪里创建这个转换器?实体类内部??如何实际触发转换器在哪里进行转换,在哪里插入代码任何人都可以回答这个问题吗??

更新:

我认为我需要以某种方式进行转换来解决这个问题,我确实将 public Game fkgameid 更改为 public Integer fkgameid 但我收到验证错误,说我想将非实体作为实体值发送

在 session 外观中,我遇到了由playerGame.getFKGameID引起的错误:

    private List<PlayerGameDetails> copyPlayerGamesToDetails(List<PlayerGame> playerGames) {
List<PlayerGameDetails> list = new ArrayList<PlayerGameDetails>();
Iterator i = playerGames.iterator();
while (i.hasNext()) {
PlayerGame playerGame = (PlayerGame) i.next();
Integer fkgameid = (Integer) playerGame.getFkGameId();
PlayerGameDetails details = new PlayerGameDetails(playerGame.getPlayerGameId(),
playerGame.getPlayerGameScore(), playerGame.getFkGameId(), playerGame.getFkPlayerId());
list.add(details);
}
return list;
}

有错误游戏无法转换为 g 和 p 上的整数还有这个:

    @Override
public void createPlayerGame(PlayerGameDetails details) {
try {
Integer g = (Integer) details.getFkGameId();
Integer p = (Integer) details.getFkPlayerId();
PlayerGame playerGame = new PlayerGame(details.getPlayerGameId(), details.getPlayerGameScore(), g, p);
em.persist(playerGame);
} catch (Exception ex) {
throw new EJBException(ex);
}
}

错误提示整数无法转换为游戏

最佳答案

您不应该使用任何转换器。保留ManyToOne关联

假设您想为现有游戏和现有玩家创建一个 PlayerGame,而不是定义

public PlayerGame(Integer id, Integer fkGameId, Integer fkPlayerId)

定义

    public PlayerGame(Integer id, Game game, Player player)

(尽管您的 ID 应该自动生成,因此不应成为构造函数的一部分)

而不是使用

PlayerGame pg = new PlayerGame(1, 2, 3);

使用

PlayerGame pg = new PlayerGame(1, 
entityManager.getReference(Game.class, 2),
entityManager.getReference(Player.class, 3));

请注意,如果游戏和玩家是该实体的唯一字段,则可以完全放弃它,并替换为玩家和游戏之间的多对多关联。

我还将字段 fkGameId 重命名为 game。你拥有的不是 ID,而是 Game 的实例。 fk代表外键,它是一个关系数据库概念,而不是OO概念。

关于java - 如何实现本例中的实体转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584328/

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