代码如下;
我有一个主题的实体ThemeBean.javaimport java.io.Serializable;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "THEME")
public class ThemeBean implements Serializable{private static final long serialVersionUID = -4658290538342157675L;@Id
@Column(name = "THEME_ID")
@SequenceGenerator(name = "SEQ_THEME_SEQ", sequenceName = "THEME_SEQUENCE", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_THEME_SEQ")
private Long id;@Column(name = "THEME_NAME_EN")
private String themeNameEn;@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "THEME_ID")
private Set<ThemeBeanHistory> themeBeanHistorySet;public Long getId() {
return id;
}public void setId(Long id) {
this.id = id;
}public String getThemeNameEn() {
return themeNameEn;
}public void setThemeNameEn(String themeNameEn) {
this.themeNameEn = themeNameEn;
}
public Set<ThemeBeanHistory> getThemeBeanHistorySet() {
return themeBeanHistorySet;
}public void setThemeBeanHistorySet(Set<ThemeBeanHistory> themeBeanHistorySet) {
this.themeBeanHistorySet = themeBeanHistorySet;
}public void addThemeHistory(ThemeBeanHistory themeHistory){
if(getThemeBeanHistorySet() == null){
setThemeBeanHistorySet(new TreeSet());
}
getThemeBeanHistorySet().add(themeHistory);
}
}还有个主题历史的实体:
import java.io.Serializable;
import java.util.Date;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;/**
*
* 类说明:主题bean历史记录
*/
@Entity
@Table(name = "THEME_HISTORY")
public class ThemeBeanHistory implements Serializable{private static final long serialVersionUID = -7707936885348490454L;@Id
@Column(name = "ID")
@SequenceGenerator(name = "SEQ_THEME_HIS_SEQ", sequenceName = "THEME_HISTORY_SEQUENCE", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_THEME_HIS_SEQ")
private Long id;@Column(name = "STATUS")
private String status;@Column(name = "OPERATION_DATE")
private Date operationDate;@Column(name = "MODIFIER_ID")
private Long modifierId;@Column(name = "OPERATE_RESULT")
private Boolean operateResult;public Long getId() {
return id;
}public void setId(Long id) {
this.id = id;
}public String getStatus() {
return status;
}public void setStatus(String status) {
this.status = status;
}public Date getOperationDate() {
return operationDate;
}public void setOperationDate(Date operationDate) {
this.operationDate = operationDate;
}public Long getModifierId() {
return modifierId;
}public void setModifierId(Long modifierId) {
this.modifierId = modifierId;
}public Boolean getOperateResult() {
return operateResult;
}public void setOperateResult(Boolean operateResult) {
this.operateResult = operateResult;
}
}
我只做了one-to-many单向映射,插入主题的时候,历史表会新增一条记录,并且外键是有的,如果变成双向关联,新增的时候历史表的外键为null,我很不解,反复尝试后,发现只有在one端加joinColumn历史表的外键才不为null。现在的问题是,我要做one端删除的时候,多方只是将外键update为null.求解啊
我有一个主题的实体ThemeBean.javaimport java.io.Serializable;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "THEME")
public class ThemeBean implements Serializable{private static final long serialVersionUID = -4658290538342157675L;@Id
@Column(name = "THEME_ID")
@SequenceGenerator(name = "SEQ_THEME_SEQ", sequenceName = "THEME_SEQUENCE", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_THEME_SEQ")
private Long id;@Column(name = "THEME_NAME_EN")
private String themeNameEn;@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "THEME_ID")
private Set<ThemeBeanHistory> themeBeanHistorySet;public Long getId() {
return id;
}public void setId(Long id) {
this.id = id;
}public String getThemeNameEn() {
return themeNameEn;
}public void setThemeNameEn(String themeNameEn) {
this.themeNameEn = themeNameEn;
}
public Set<ThemeBeanHistory> getThemeBeanHistorySet() {
return themeBeanHistorySet;
}public void setThemeBeanHistorySet(Set<ThemeBeanHistory> themeBeanHistorySet) {
this.themeBeanHistorySet = themeBeanHistorySet;
}public void addThemeHistory(ThemeBeanHistory themeHistory){
if(getThemeBeanHistorySet() == null){
setThemeBeanHistorySet(new TreeSet());
}
getThemeBeanHistorySet().add(themeHistory);
}
}还有个主题历史的实体:
import java.io.Serializable;
import java.util.Date;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;/**
*
* 类说明:主题bean历史记录
*/
@Entity
@Table(name = "THEME_HISTORY")
public class ThemeBeanHistory implements Serializable{private static final long serialVersionUID = -7707936885348490454L;@Id
@Column(name = "ID")
@SequenceGenerator(name = "SEQ_THEME_HIS_SEQ", sequenceName = "THEME_HISTORY_SEQUENCE", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_THEME_HIS_SEQ")
private Long id;@Column(name = "STATUS")
private String status;@Column(name = "OPERATION_DATE")
private Date operationDate;@Column(name = "MODIFIER_ID")
private Long modifierId;@Column(name = "OPERATE_RESULT")
private Boolean operateResult;public Long getId() {
return id;
}public void setId(Long id) {
this.id = id;
}public String getStatus() {
return status;
}public void setStatus(String status) {
this.status = status;
}public Date getOperationDate() {
return operationDate;
}public void setOperationDate(Date operationDate) {
this.operationDate = operationDate;
}public Long getModifierId() {
return modifierId;
}public void setModifierId(Long modifierId) {
this.modifierId = modifierId;
}public Boolean getOperateResult() {
return operateResult;
}public void setOperateResult(Boolean operateResult) {
this.operateResult = operateResult;
}
}
我只做了one-to-many单向映射,插入主题的时候,历史表会新增一条记录,并且外键是有的,如果变成双向关联,新增的时候历史表的外键为null,我很不解,反复尝试后,发现只有在one端加joinColumn历史表的外键才不为null。现在的问题是,我要做one端删除的时候,多方只是将外键update为null.求解啊
解决方案 »
- 关于 MyEclipse struts.xml的问题 求救!!
- 程序老是报错:No getter method for property: "password2" of bean
- spring问题?
- 搞PDM的同行近来看看
- struts2 ajax验证的问题
- java.socketException
- finereport在做的活动~有兴趣的可以去看一下~
- Struts 中文乱码问题 以及 URL暴露表单数据和SessionID问题,急~~~
- resin2.0.4升级到resin3.0.9JSP无法正常运行输入用户名和密码抛出java.lang.NullPointerException 错误,我认为是配置文件(resin.conf)问
- 急!!有关JNDI的问题
- 软件测试的用例模式有哪些
- spring 事务的问题,向大家请教请教!
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name="THEME_ID")
private ThemeBean themeBean主题表
@OneToMany(cascade = CascadeType.ALL,mappedBy = "themeBean")
private Set<ThemeBeanHistory> themeBeanHistorySet;这样就行了
主题表
@OneToMany(cascade = CascadeType.ALL,mappedBy = "themeBean")
private Set<ThemeBeanHistory> themeBeanHistorySet;删掉就可以了
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name="THEME_ID")
private ThemeBean themeBean然后再
@OneToMany(cascade = CascadeType.ALL,mappedBy = "themeBean")
加上了@JoinColumn(name="THEME_ID")这个
private Set<ThemeBeanHistory> themeBeanHistorySet;
@JoinColumn(name = "THEME_ID")
private ThemeBean themeBean; @OneToMany(cascade = CascadeType.ALL,mappedBy = "themeBean")
private Set<ThemeBeanHistory> themeBeanHistorySet;
后台就一句SQL:
Hibernate: delete from MDM_THEME where THEME_ID=?