在Hibernate中使用mappedBy时持久子实体
问题描述:
我的数据库模式有两个表: - Rule Table
和Rule Scope
表。
规则表中的列(rule_id
主键,.....)和规则范围列(rule_id
外键,Scope_id
(不能自动生成的ID,可以重复用于不同RULE_ID)
规则范围的主键的组合rule_id
以及Scope_id
在Hibernate中使用mappedBy时持久子实体
我RULE
实体
@Entity
@Table(name = "RULE")
public class Rule implements IEntity {
@Column(name = "RULE_ID")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int ruleId;
@OneToMany(fetch=FetchType.LAZY,mappedBy="rule")
private Set<RuleScope> ruleScope=new HashSet<RuleScope>();
Rule Scope
实体: -
@Entity
@Table(name = "RULE_SCOPE")
public class RuleScope {
@Embeddable
public static class Id implements Serializable{
@Column(name = "RULE_ID")
private int ruleId;
@Column(name = "SCOPE_ID")
private int scopeId;
}
@EmbeddedId
private Id id = new Id();
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "RULE_ID", insertable = false, updatable = false)
private Rule rule;
我有以下问题: -
当我试图保存规则,但它不是坚持子实体。当持续违反外键约束的规则范围时,规则ID为0。但是,当我使用@JoinColumn它正在工作。请帮助我坚持Rule Scope
,同时坚持Rule
并使用mappedBy
。
答
试试这个:
规则实体:
@Entity
@Table(name = "RULE")
public class Rule implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "RULE_ID", unique = true, nullable = false)
private int ruleId;
@OneToMany(mappedBy = "id.rule", cascade = CascadeType.ALL)
private Set<RuleScope> ruleScope = new HashSet<RuleScope>(0);
// Generate Getters, Setters, hashCode() and equals()
}
RULE_SCOPE实体:
@Entity
@Table(name = "RULE_SCOPE")
public class RuleScope implements Serializable {
@EmbeddedId
private Id id;
// Generate Getters, Setters
}
RULE_SCOPE复合PK:
@Embeddable
public class Id implements Serializable {
@ManyToOne
@JoinColumn(name = "RULE_ID", , nullable = false)
private Rule rule;
@Column(name = "SCOPE_ID")
private int scopeId;
// Generate Getters, Setters, hashCode() and equals()
}
+0
感谢您的更新..我纠正,它开始工作。我使用了不同的方法.. – 2014-12-07 16:27:18
您是否尝试过:@OneToMany(的mappedBy =“rule”,fetch = FetchType.LAZY) private设置 ruleScope = new HashSet (); –
2014-12-01 16:13:51
它给出了同样的例外 – 2014-12-01 16:55:19
我目前使用OpenJPA,并不能很有帮助。我会尝试ManyToMany,PrimaryKeyJoinColum或JOIN策略....您可以稍后再查看,然后将其更改回来。 – 2014-12-01 22:00:52