Hibernate 一对一、一对多、多对多注解cascade不起作用和主外键关系

好白菜 1年前 ⋅ 8408 阅读
/**
* Defines the set of cascadable operations that are propagated
* to the associated entity.
* The value cascade=ALL is equivalent to
* cascade={PERSIST, MERGE, REMOVE, REFRESH, DETACH}.
* @since Java Persistence 1.0
*/
public enum CascadeType {

/** Cascade all operations */
ALL,
/** Cascade persist operation */
PERSIST,
/** Cascade merge operation */
MERGE,
/** Cascade remove operation */
REMOVE,
/** Cascade refresh operation */
REFRESH,
/**
* Cascade detach operation
* @since Java Persistence 2.0
*/
DETACH
}
@ManyToOne(cascade=CascadeType.REMOVE,fetch=FetchType.EAGER)
@JoinColumn(name="UserID",nullable = false)
private User user;//用户外键
令我不解的是设置什么数据库表外键都是RESTRICT状态,我用的是实体CreateDBTable很奇怪
这样写JoinColumn里加入foreignKey 的指定就可以了name是外键名称value=PROVIDER_DEFAULT指定数据库生成主外键关系,设置成
NO_CONSTRAINT 就是不在数据库生成主外键关系

@JoinColumn( name="UserID",nullable = false,referencedColumnName = "id",foreignKey = @ForeignKey(name ="UserIDIndexf",value = PROVIDER_DEFAULT))
PERSIST 级联session的persist操作。假设Student类和teachers字段的@ManyToMany注解上配置有cascade = {CascadeType.PERSIST},那么,当stu1对象set了一个teachers集合(这个集合里面的对象都是瞬态的),持久化这个stu1d对象时,这个集合里面的所有瞬态对象都会被级联持久化到数据库。
MERGE 级联merge操作。道理同上。
REMOVE 级联remove操作。道理同上。
REFRESH 级联refresh操作。道理同上。
DETACH 级联evict操作。道理同上。
ALL 级联以上所有操作。

全部评论: 0

    我有话说: