Java 是否可以在JPA/Hibernate中动态更改级联类型?

Java 是否可以在JPA/Hibernate中动态更改级联类型?,java,hibernate,jpa,Java,Hibernate,Jpa,考虑以下代码: @Entity public class User { @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "USER_ID") private List<UserRole> roles; } @实体 公共类用户{ @OneToMany(fetch=FetchType.LAZY) @JoinColumn(name=“USER\u ID”) 私有列表角色; } 根据

考虑以下代码:

@Entity
public class User {
    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name = "USER_ID")
    private List<UserRole> roles;

}
@实体
公共类用户{
@OneToMany(fetch=FetchType.LAZY)
@JoinColumn(name=“USER\u ID”)
私有列表角色;
}
根据上面的代码,User.roles将被延迟加载。但是,我们可以使用fetchgraph更改此行为,如下所示:

EntityGraph<User> graph = entityManager.createEntityGraph(User.class);
graph.addSubgraph("roles");
typedQuery.setHint("javax.persistence.fetchgraph", graph);
List<User> entities = typedQuery.getResultList();//roles will be eagerly loaded
EntityGraph=entityManager.createEntityGraph(User.class);
添加子图(“角色”);
setHint(“javax.persistence.fetchgraph”,graph);
List entities=typedQuery.getResultList()//角色将被急切地加载

当@OneToMany.cascade=null时,是否可以让JPA provider/Hibernate使用角色字段创建和更新用户?换句话说,我想动态添加cascade=CascadeType.ALL,以便对所有创建/更新/删除操作的实体树进行完整和动态控制。

No,您不能动态更改
insertable=false,updateable=false
。您能解释一下为什么需要它吗?如果您想更新字段,则意味着该字段是可更新的,因此设置updateable=false没有意义。如果您只想在更新期间更改某些字段,那么可以编写自己的JPQL查询,例如:“更新实体e set e.boolField=false,其中e.boolField=true”这个问题相当令人困惑。
insertable
/
updateable
与实体图有什么关系?@crizzis你是对的。我错了。我纠正了我的错误并编辑了这个问题。它仍然令人困惑,因为级联与实体图和获取类型无关。