我與兩個實體之間的附加列具有多對多關係。在所有者端實體上,我設置了級聯類型以保留。jpa多對多,帶附加列
@OneToMany(cascade=CascadeType.PERSIST, fetch = FetchType.LAZY, mappedBy = "definitionType")
private List<DefinitionProperty> definitionProperties = new ArrayList<DefinitionProperty>();
這是我代表新實體表:
@EmbeddedId
protected DefinitionPropertyPK pk;
@JoinColumn(name = "dtid", referencedColumnName = "id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private DefinitionType definitionType;
@JoinColumn(name = "prid", referencedColumnName = "id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Property property;
@Column(name = "initial_value", insertable = false, updatable = false)
@Basic(optional = false)
private String initialValue;
問題是,當我堅持所有者對象將插在數據庫中,但什麼都不會在被創建的連接表,我得到'不能將值NULL插入到'initial_value''Exception'列中。我不知道爲什麼它是空的,因爲我已經將它設置在服務代碼中。
Call: INSERT INTO definition_property (initial_value, dtid, prid) VALUES (?, ?, ?)
bind => [3 parameters bound]
這是我的服務代碼,以及如何創建新對象並設置它們的值。
DefinitionType definitionType = new DefinitionType();
String propertyIds[] = idProperty.split(",");
String propertyVals[] = propertyValues.split(",");
for (int i = 0; i < propertyIds.length; i++) {
Property property = propertyDao.find(Integer.parseInt(propertyIds[i]));
DefinitionProperty dp = new DefinitionProperty();
if (propertyVals[i] != "" || propertyVals[i]!=null) {
dp.setInitialValue(propertyVals[i]);
} else {
dp.setInitialValue(property.getInitialValue());
}
dp.setDefinitionType(definitionType);
dp.setProperty(property);
definitionType.getDefinitionProperties().add(dp);
}
definitionTypeDao.persist(definitionType);
你可以找到所有的代碼here。
你可以標記你的答案是正確的 – 2014-12-02 15:36:16
需要2天! – sina 2014-12-02 15:39:40
噢,對不起,我不確定你可以立即接受什麼聲望 – 2014-12-02 15:41:57