相关疑难解决方法(0)

Hibernate一对一:getId()而不提取整个对象

我想在不加载整个对象的情况下获取一对一关系的id.我以为我可以使用延迟加载执行此操作,如下所示:

class Foo { 
    @OneToOne(fetch = FetchType.LAZY, optional = false)
    private Bar bar; 
}


Foo f = session.get(Foo.class, fooId);  // Hibernate fetches Foo 

f.getBar();  // Hibernate fetches full Bar object

f.getBar().getId();  // No further fetch, returns id
Run Code Online (Sandbox Code Playgroud)

我希望f.getBar()不会触发另一个提取.我希望hibernate给我一个代理对象,允许我调用.getId()而不实际获取Bar对象.

我究竟做错了什么?

java hibernate jpa

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

JPA:外键注释

我有两个数据库实体:ForumTopic.

Topicprotected long forumId数据成员,当然表示Topic论坛.

我的问题是这个数据成员使用的注释是什么?

java orm database-design annotations jpa

23
推荐指数
2
解决办法
8万
查看次数

一对多单向关系的外键约束问题

我有Employee(父母)和Emp_Contacts(孩子).只有Employee类具有单向映射.

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotEmpty;

@Entity
@Table(name="EMPLOYEE")
public class Employee {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;

  @Size(min=3, max=50)
  @Column(name = "NAME", nullable = false)
  private String name;

...

  @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  @JoinColumn(name = "emp_id")
  private Set<Emp_Contacts> contacts;

...getters and setters...
Run Code Online (Sandbox Code Playgroud)

我的Emp_Contacts情况如下:

@Entity
@Table(name = "Emp_Contacts") …
Run Code Online (Sandbox Code Playgroud)

java mysql hibernate foreign-keys spring-mvc

7
推荐指数
1
解决办法
7328
查看次数

仅加载多对一关系的 ID

我在使用 hibernate 时遇到了性能问题。我有以下几点:

@Data
@Entity
@Table(name="\"Order_product\"")
public class OrderProduct {
    @Id
    @SequenceGenerator(name="Order_product_id_seq",
            sequenceName="Order_product_id_seq",
            allocationSize=1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
            generator="Order_product_id_seq")
    private long id;
    @ManyToOne
    @NotNull
    private Product product;
    @ManyToOne
    @NotNull
    private ProductPrice price;
    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    @NotNull
    private Order order;
}
Run Code Online (Sandbox Code Playgroud)

现在,每当我尝试执行:

List<OrderProduct> findByOrderId(@Param(value = "order") Long orderId);
Run Code Online (Sandbox Code Playgroud)

Hibernate 将为每个 OrderProduct 加载整个 Order。如何禁用此功能,以便仅加载订单 ID?

java hibernate

4
推荐指数
1
解决办法
3600
查看次数

@ManyToOne 引用的 getId() 上的 LazyInitializationException

LazyInitializationException当我尝试访问分离实体的惰性 @ManyToOne 引用的 ID 时,我正面临着这种情况。我不想完全获取引用,而只需要 ID(它应该存在于原始对象中,以便以惰性/延迟方式获取引用)。

EntityA ea = dao.find(1) // find is @Transactional, but transaction is closed after method exits
ea.getLazyReference().getId() // here is get exception. lazyReference is a ManyToOne relation and so the foreight key is stored in EntityA side.
Run Code Online (Sandbox Code Playgroud)

换句话说,如何在不实际获取整个 LazyReference 的情况下访问 LazyReference 的 ID(实际上存在于 EntityA 的初始选择中)?

java hibernate lazy-loading many-to-one lazy-initialization

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