我正在使用带有JPA + Hibernate的spring,而我从JpaRepository调用getReference或getOne时会调用select,但所有值仍然保持为null。如何阻止选择被调用。我希望能够直接使用引用直接添加链接而无需获取它们。实体映射基于http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#associations-many-to-many-bidirectional-with-link-entity
Entitity
@Entity(name = "Parent")
public class Parent implements Serializable{
@Id
@GeneratedValue
private Integer id;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<ParentChild> children = new ArrayList<>();
public void addChild(Child child){
ParentChild parentChild = new ParentChild(this,child);
this.children.add(parentChild);
child.getParents().add(parentChild);
}
@Override
public boolean equals(Object o) {
if ( this == o ) {
return true;
}
if ( o == null || getClass() != o.getClass() ) {
return false;
}
Parent u = (Parent)o;
return Objects.equals( id, u.id );
}
@Override
public int hashCode() {
return Objects.hash( id );
}
}
服务功能
@Override
@Transactional
public void linkChildToParent(Integer childId, Integer parentId){
Parent parent = em.getReference(Parent.class,parentId);
Child child = em.getReference(Child.class,childId);
parent.addChild(child);
}
在我访问任何属性之前,两个引用都会调用select。
答案 0 :(得分:0)
您可以向getId
和Parent
类添加公开Child
方法,将@Id
和@GeneratedValue
注释移至这些方法并重试吗?
根据Java Persistence with Hibernate的书,调用代理上的任何方法都不是&#34;识别getter&#34;将触发代理的初始化并命中数据库。