1

我的提供者是:org.eclipse.persistence.jpa.PersistenceProvider

我的实体代码是:

@Entity
@NamedQueries( { @NamedQuery(name = "Bank.findAll", query = "select o from Bank o") })
@Table(name = "B_BANK")
public class Bank implements Serializable {

private final static String ID_GENERATOR = "Bank";

private Long id;
private User modifier;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = ID_GENERATOR)
@SequenceGenerator(name = ID_GENERATOR, allocationSize = 1, sequenceName = "sq_B_BANK")
@Column(name = "id")
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "modifier")
public User getModifier() {
    return modifier;
}

public void setModifier(User modifier) {
    this.modifier = modifier;
}

}

我的测试代码只是:

    entityManagerHelper = new EntityManagerHelper("Model", isAutoCommit);

   List l = entityManagerHelper.getEntityManager().createQuery("select b from Bank b").getResultList();

但是在我的控制台中我有这个:

SELECT id,修饰符 FROM B_BANK SELECT id,CREATION_DATE,MODIFICATION_DATE,修饰符,创建者 FROM B_USER WHERE (id = ?) bind => [2]

因此,似乎 JPA 查询了我在其上放置 fetch = FetchType.LAZY 的用户!我想知道为什么 JPA 也查询用户。任何帮助,将不胜感激。

4

1 回答 1

3

虽然答案是正确的,但 EclipseLink 使用编织来实现 OneToOne 和 ManyToOne 关系的延迟获取。如果您没有在容器环境中运行,那么您将不得不添加一个代理或将您的实体设置为静态编织以在 1:1 上使用惰性,如下所述:http: //wiki.eclipse.org/EclipseLink/ UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Dynamic_Weaving 在这里http://www.eclipse.org/eclipselink/documentation/2.4/concepts/app_dev007.htm

于 2013-05-06T13:20:31.660 回答