java - JPA ManyToMany 注释用于不加载集合中的所有项目

标签 java jpa

我有User类和BattleReportILogItem类(class)。这个类( UserBattleReportILogItem )是 @Entity .

User0..N BattleReportILogItem .

用户

    @Entity
    @Table(name = DomainConstant.TABLE_USER)
    public class User implements Serializable {

        @Id
        @Column(name = DomainConstant.DOMAIN_USER_ID)
        @GeneratedValue
        private Long userId;

        @ManyToMany(cascade = {CascadeType.ALL})
        @JoinTable(name = DomainConstant.VIEW_USER_BATTLE_LOGS, joinColumns = {
            @JoinColumn(name = DomainConstant.DOMAIN_USER_ID)}, inverseJoinColumns = {
            @JoinColumn(name = DomainConstant.DOMAIN_BATTLE_REPORT_ID)})
        private Set<BattleReportILogItem> setOfBattleLogs = new HashSet<>();

....(other stuff, get and set methods...)

BattleReportILogItem

@Entity
@Table(name = DomainConstant.TABLE_BATTLE_REPORT)
public class BattleReportILogItem implements Serializable {



      @Id
        @GeneratedValue
        @Column(name = DomainConstant.DOMAIN_BATTLE_REPORT_ID)
        private Long BattleReportILogItemId;

        @ManyToMany(mappedBy = "setOfBattleLogs")
        private Set<User> setOfBattleLogs = new HashSet<>();

        ....(other stuff, get and set methods...)

问题是,我加载 User程序加载 private Set<BattleReportILogItem> setOfBattleLogs = new HashSet<>(); 中的所有数据。这意味着1 000 000 000我的套装中的元素 setOfBattleLogs 。我不想将数据加载到此 set 。对于加载数据我有 BattleReportLogItemDao DAO

是否有任何解决方案如何不加载数据到我的 set

我希望你能理解我...:-))

感谢您的帮助。

编辑persistence.xml :

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

    <persistence-unit name="com.donutek"  transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <properties>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>

            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>

            <property name="hibernate.connection.password" value=""/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db"/>

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.validator.apply_to_ddl" value="true" />

            <property name="connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
            <property name="hibernate.c3p0.min_size" value="5"/>
            <property name="hibernate.c3p0.max_size" value="20"/>
            <property name="hibernate.c3p0.timeout" value="300"/>
            <property name="hibernate.c3p0.max_statements" value="50"/>
            <property name="hibernate.c3p0.idle_test_period" value="300"/>

        </properties>
    </persistence-unit>
</persistence>

编辑2: 对于加载用户,我使用代码:

@Override
public User findByEmail(String email) {
    TypedQuery<User> q = em.createQuery("SELECT u FROM " + User.class.getSimpleName() + " u WHERE u.email = :uemail", User.class);
    q.setParameter("uemail", email);
    try {
        return q.getSingleResult();
    } catch (NoResultException e) {
        return null;
    }
}

最佳答案

您可以使用参数 fetchtype Lazy。现在你的策略似乎是 Eager。

关于java - JPA ManyToMany 注释用于不加载集合中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35667781/

相关文章:

java - 如何在 Wicket 口创建元素 <a>

java - 如何使(JAR)文件能够访问应用程序所需的外部文件夹?

java - 不可见的 JRadioButtons

java - 如何在具有 @ManyToMany 关系 JPA spring boot 的同时摆脱循环冗余

java - java bean 创建、hibernate 和 spa 的问题

java - 如何通过 Java 包装器执行 IBM Watson Retrieve And Rank API 中的 searchAndRank 方法

java - Jasper Report 两次显示主报告

hibernate - 如何与 JPA/Hibernate 建立基本的多对多关系?

java - hibernate/JPA : How to do the query that return the attribute of the DAO?

java - Spring 数据JPA : overriding toPredicate when inner object's variable is criteria