相关疑难解决方法(0)

从控制台应用程序使用带有hibernate的spring-data-jpa时如何进行延迟加载

我有一个小的控制台应用程序,我使用spring-data-jpa和hibernate.在独立控制台应用程序中使用spring-data-jpa及其存储库时,我真的无法弄清楚如何延迟初始化集合.这是我的一些代码:

@Entity
public class User {
...
    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="USER_ORDER_ID")
    private Set<Order> orders = new HashSet<Order>();
...
}
Run Code Online (Sandbox Code Playgroud)

库:

public interface UserRepository extends PagingAndSortingRepository<User, Long> {

    public ArrayList<User> findByFirstNameIgnoreCase(String firstName);
}
Run Code Online (Sandbox Code Playgroud)

服务impl:

@Service
@Repository
@Transactional
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;

public ArrayList<User> findByFirstNameIgnoreCase(String firstName) {
    ArrayList<User> users = new ArrayList<User>();
    users = userRepository.findByFirstNameIgnoreCase(firstName);
    return users;
}
Run Code Online (Sandbox Code Playgroud)

我的主要方法:

...
user = userRepository.findByFirstNameIgnoreCase("john").get(0);
orders = user.getOrders();
for (Order order : orders) {
  LOGGER.info("getting orders: " + order.getId());
} …
Run Code Online (Sandbox Code Playgroud)

hibernate spring-data-jpa

31
推荐指数
2
解决办法
4万
查看次数

Spring Data JPA - "无法初始化代理 - 无会话" - 使用标记为事务的方法

我有一个模型有一个相当大的子实体图和hibernate最终制作了大约9个语句懒洋洋地获取所需的所有数据但大约4级深度我得到一个"无法初始化代理 - 没有会话"错误,我是不知道为什么.

调节器

@Transactional(readOnly = true)
@RequestMapping(value = "/v2/plans", method = RequestMethod.GET)
public @ResponseBody List<PlanPresenter> show(HttpServletRequest request) throws Exception {
  List<PlanPresenter> planPresenters = new ArrayList<>();

  CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
  CriteriaQuery<Plan> planQuery = criteriaBuilder.createQuery(Plan.class);
  Root<Plan> root = planQuery.from(Plan.class);

  if (request.getParameter("region") != null || request.getParameter("group") != null) {
    List<Predicate> criteria = new ArrayList<Predicate>();
    if (request.getParameter("region") != null) {
      criteria.add(criteriaBuilder.equal(root.get(Plan_.region), request.getParameter("region")));
    }

    if (request.getParameter("group") != null) {
      criteria.add(criteriaBuilder.equal(root.get(Plan_.groupCode), request.getParameter("group")));
      criteria.add(root.get(Plan_.planSetId).in(groupPlanSetIds));
    } else {
      criteria.add(root.get(Plan_.planSetId).in(currentPlanSetIds));
    }

    Query query = entityManager.createQuery(planQuery.where(criteriaBuilder.and(criteria.toArray(new Predicate[]{}))));

    for (Plan …
Run Code Online (Sandbox Code Playgroud)

java hibernate c3p0 spring-data-jpa spring-boot

27
推荐指数
2
解决办法
4万
查看次数

具有多个关联的 Hibernate fetch

我正在为实体对象上的延迟加载集合执行此操作:

@Transactional(readOnly = true)
public T getWithAssociation(final long id, String association) {
    Session session = sessionFactory.getCurrentSession();
    final Criteria crit = session.createCriteria(genericType);
    crit.setFetchMode(association, FetchMode.JOIN);
    crit.add(Property.forName("id").eq(id));
    return (T) crit.uniqueResult();
}
Run Code Online (Sandbox Code Playgroud)

我想与多个延迟加载的集合返回一个实体对象加载的,我能做到这一点(通过在列表中,并设置超过联想单个标准是什么?):

   @Transactional(readOnly = true)
    public T getWithAssociations(final long id, List<String> associations) {
        Session session = sessionFactory.getCurrentSession();
        final Criteria crit = session.createCriteria(genericType);
        for(String association:associations) {
            crit.setFetchMode(association, FetchMode.JOIN);
        }
        crit.add(Property.forName("id").eq(id));
        return (T) crit.uniqueResult();
    }
Run Code Online (Sandbox Code Playgroud)

java spring hibernate

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

标签 统计

hibernate ×3

java ×2

spring-data-jpa ×2

c3p0 ×1

spring ×1

spring-boot ×1