java - 转换 Hibernate 列表而不初始化它

标签 java spring hibernate

我有两个实体:牌组和卡牌

@Entity
class Deck {
    private String name;

    @ManyToMany
    private List<Card> cards;
}

@Entity
class Card {
    private String name;

    @ManyToMany
    private List<Deck> decks;
}

每个实体都有一个模型

class DeckModel {
    private String name;
    private List<CardModel> cards;
}

class CardModel {
    private String name;
    private List<DeckModel> decks;
}

现在我想转换 DeckDeckModel所以我创建了这两个函数:

DeckModel convert(Deck deck) {
    DeckModel model = new DeckModel();
    model.setName(deck.getName());
    model.setCards(deck.getCards().stream()
            .map(card -> convert(card))
            .collect(Collectors.toList()));
    return model;
}

CardModel convert(Card card) {
    CardModel model = new CardModel();
    model.setName(card.getName());
    model.setDecks(deck.getDecks().stream()
            .map(deck -> convert(deck))
            .collect(Collectors.toList()));
    return model;
}

这段代码的问题是当我转换Card(s)时在CardModel(s)我触发了与我正在转换的牌组相关的所有卡片的延迟加载,但我想要的是稍后在我的应用程序中决定是否要获取所有 Card(s)Deck 相关.

有没有一种简单/标准的方法可以做到这一点?

最佳答案

由于列表中的模型不同,您需要迭代 for 循环并手动设置它。 您不能使用反射,因为模型字段不同。 否则你可以使用 BeanUtils.copyProperties() 将 DeckEntity 的字段映射到 Deck 并在列表中设置该 Deck 对象。

关于java - 转换 Hibernate 列表而不初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52329856/

相关文章:

java - 无法在其余 Controller 中重定向响应

mysql - 选择记录,其中 id 是集合 id 之一

java - 创建参数化 Spring bean 配置

java - 将Jsch放入连接池详解

java - Grails 默认应用程序未部署到 tomcat

java - 如何删除(多线程)事务性 Spring/JPA 中的实体

java - 使用 Microsoft REST API 将 Xbox-Live GamerTag 转换为 XUID - Java

java - 企业java应用程序架构。动态域模型

java - 为 Java EE 6 中的调度程序授予安全权限

java - 即使数据库不存在,也可以使用 Hibernate 即时创建 PostgreSQL 数据库