簡體   English   中英

jpa多對多附加列

[英]jpa many-to-many with additional column

我與兩個實體之間的附加列之間存在多對多關系。 在所有者方面,我將級聯類型設置為持久。

    @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”的異常。 我不知道為什么它為空,因為我已經在服務代碼中設置了它。

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);

您可以在此處找到所有代碼。

你確定這句話嗎

dp.setInitialValue(propertyVals[i]);

propertyVals[i] is not null

“可選”討論屬性和字段值,並建議應在運行時評估此功能。

我通過將@EmbeddedId更改為@IdClass並從中間實體類中刪除insertable = false,updatable = false來解決了,現在一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM