相关疑难解决方法(0)

Hibernate Criteria使用FetchType.EAGER多次返回子项

我有Order一个列表的类,OrderTransactions我用一对多的Hibernate映射映射它,如下所示:

@OneToMany(targetEntity = OrderTransaction.class, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
    return orderTransactions;
}
Run Code Online (Sandbox Code Playgroud)

这些Order还有一个字段orderStatus,用于使用以下条件进行过滤:

public List<Order> getOrderForProduct(OrderFilter orderFilter) {
    Criteria criteria = getHibernateSession()
            .createCriteria(Order.class)
            .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()));
    return criteria.list();
}
Run Code Online (Sandbox Code Playgroud)

这有效,结果如预期.

现在这里是我的问题:为什么,当我明确地设置fetch类型时EAGER,Orders会在结果列表中多次出现?

@OneToMany(targetEntity = OrderTransaction.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
    return orderTransactions;
}
Run Code Online (Sandbox Code Playgroud)

如何更改我的Criteria代码以使用新设置达到相同的结果?

java hibernate

113
推荐指数
4
解决办法
7万
查看次数

休眠集或列表

任何人都可以知道何时使用Set以及何时在hibernate映射文件中使用List?

<set name="" table="">
    <key>
        <column name="" />
    </key>
</set>


<list name="" cascade="all">
    <key column="" />
    <index column="" />
    <one-to-many class=""/>
</list>
Run Code Online (Sandbox Code Playgroud)

谢谢.

hibernate list set

12
推荐指数
1
解决办法
3万
查看次数

Hibernate 4.3到5.2升级 - 无法同时获取多个行李

尝试从4.3.11升级到hibernate 5.2.9.目前使用的是hibernate native api.在pom.xml中添加依赖项后,运行单元测试时出现以下错误:

通过字段'sessionFactory'表示不满意的依赖; 嵌套异常是org.springframework.beans.factory.BeanCreationException:创建类路径资源[testApplicationContext.xml]中定义的名为'sessionFactory'的bean时出错:init方法的调用失败; 嵌套异常是org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包

我有一个testApplicationContext.xml,其中包含以下内容:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="packagesToScan" value="org.xxxx.xxxx.xxxx.model"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />
Run Code Online (Sandbox Code Playgroud)

我将sessionFactory和transactionManager从hibernate4更新为hibernate5.

pom.xml:

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.2.9.Final</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

据我所知,错误消息暗示加载多个急切加载的集合时出现问题.但是,我从知道这个,使用Hibernate的相关注释和休眠支持新版本的这种使用情况.

有人可以帮忙吗?谢谢

spring hibernate

8
推荐指数
1
解决办法
916
查看次数

在 JPA 2 上列出与设置 - 优点/缺点/方便

我曾尝试在 Stack Overflow 和其他网站上搜索使用SetsLists的优点、缺点和便利,但我真的找不到关于何时使用这个或那个的明确答案。

从 Hibernate 的文档中,他们指出非重复记录应该进入Sets,从那里,你应该为每个可以包装到Set 的单个实体实现你的 hashCode() 和 equals() 。但随后谈到了便利性和易用性的代价,因为有一些文章推荐使用业务键作为每个实体的 id,从那里开始,hashCode() 和 equals() 可以在每种情况下完美实现无论对象的状态如何(托管、分离等)。

一切都很好,一切都很好……直到我遇到很多使用Sets不可行的情况,例如排序(尽管 Hibernate 为您提供了SortedSet的想法),collectionObj.get(index) 的便利性, collectionObj.remove(int location || Object obj)、Android 的 ListView/ExpandableListView 架构(GroupIds、ChildIds)等等……我的观点是:集合真的很糟糕(恕我直言)操作并使其 100% 工作。

我很想将我项目的每个集合都更改为List,因为它们运行良好。我所有实体的 ID 都是通过 MYSQL 的自动生成序列 ( @GeneratedValue(strategy = GenerationType.IDENTITY))生成的。

有没有人可以在上面提到的所有这些小细节中以明确的方式清除我的想法?

另外,是否可以将 Eclipse 自动生成的 hashCode() 和 equals() 用于每个实体的 ID 字段?它会在所有情况下都有效吗?

非常感谢,

雷纳托

java mysql hibernate jpa

5
推荐指数
1
解决办法
1609
查看次数

Spring Boot REST Api 中的一对多关系

我正在使用 Spring Boot 创建 REST API。在此 API 中,签入来宾之间存在一对多关系。我创建了一个用于签入的控制器并使用 spring JPA 的保存功能。save 方法正在更新签入表宾客表,但对于宾客表,宾客表中的签入外键不会被添加,而是显示为空。请有人帮助我。我需要同时创建客人并签入。

签到模型

@Data
@Entity
public class Checkin {

    @Id
    private Long id;

    private Integer no_of_guests;

    @OneToMany(mappedBy = "checkin", cascade = CascadeType.ALL)
    private List<Guest> guests;
}
Run Code Online (Sandbox Code Playgroud)

嘉宾模特

@Data
@Entity
public class Guest {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long guest_id;

    private String name;

    private String mobile_no;

    private String address;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "guest_checkin_id", nullable = false )
    @JsonProperty(access …
Run Code Online (Sandbox Code Playgroud)

rest one-to-many hibernate-onetomany spring-data-jpa spring-boot

3
推荐指数
1
解决办法
1万
查看次数