Hibernate 不会级联实体保存
Hibernate wouldn't cascade entity saving
我的程序有 2 个实体:
@Entity
public class User implements Serializable {
@ManyToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER,
targetEntity = Ip.class,mappedBy = "user")
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
private Collection<Ip> allowedIp;
...
}
@Entity
public class Ip implements Serializable {
@Column(unique=false,updatable=true,insertable=true,nullable=true,
length=255,scale=0,precision=0)
@Id
private String value;
@ManyToMany(targetEntity = User.class)
private Collection<User> user;
...
}
我正在尝试使用 Spring JPA 存储库来保留新用户,如下所示:
@Transactional (readOnly = false)
@Repository
public interface UserRepository extends JpaRepository<User, String> {
}
List<Ip> allowedIp = new ArrayList<Ip>();
allowedIp.add(ipRepository.findOne("*"));
User user = new User();
user.setAllowedIp(allowedIp);
userRepository.save(user);
问题是 Ip(* 值)永远不会持久化,尽管如果我添加了 JPA 级联注释以及 hibernate 级联注释。知道为什么会出现这个问题吗?
您将@manytomany 标记为由 IP class 管理(mappedBy 注释)。您必须将用户添加到 IP.user 集合才能保持关系。
for (Ip ip : allowedIp) ip.getUser().add(user)
我的程序有 2 个实体:
@Entity
public class User implements Serializable {
@ManyToMany(cascade={CascadeType.ALL},fetch = FetchType.EAGER,
targetEntity = Ip.class,mappedBy = "user")
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
private Collection<Ip> allowedIp;
...
}
@Entity
public class Ip implements Serializable {
@Column(unique=false,updatable=true,insertable=true,nullable=true,
length=255,scale=0,precision=0)
@Id
private String value;
@ManyToMany(targetEntity = User.class)
private Collection<User> user;
...
}
我正在尝试使用 Spring JPA 存储库来保留新用户,如下所示:
@Transactional (readOnly = false)
@Repository
public interface UserRepository extends JpaRepository<User, String> {
}
List<Ip> allowedIp = new ArrayList<Ip>();
allowedIp.add(ipRepository.findOne("*"));
User user = new User();
user.setAllowedIp(allowedIp);
userRepository.save(user);
问题是 Ip(* 值)永远不会持久化,尽管如果我添加了 JPA 级联注释以及 hibernate 级联注释。知道为什么会出现这个问题吗?
您将@manytomany 标记为由 IP class 管理(mappedBy 注释)。您必须将用户添加到 IP.user 集合才能保持关系。
for (Ip ip : allowedIp) ip.getUser().add(user)