簡體   English   中英

JPA將外鍵插入為null

[英]JPA insert foreign key as null

我有2個實體,其中一個是另一個的外鍵:

@Entity
@Table(name = "XXXX")
@XmlRootElement
public class Drfacopt implements Serializable {
    @Id    
    @NotNull
    @Basic(optional = false)
    @Column(name = "OPCOD")
    private Short optionCode;

    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 50)
    @Column(name = "OPCODDH")
    private String optionCodeDescription;
}

@Entity
@Table(name = "YYYY")
@XmlRootElement
public class Drfac03f implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    protected Drfac03fPK drfac03fPK;    

    @JoinColumn(name = "F3OPT", referencedColumnName = "OPCOD" )
    @ManyToOne(optional = false)    
    private Drfacopt relationCode;
}

當我嘗試使用em.persist(drfac03f)插入新記錄時, em.persist(drfac03f)此異常:

During synchronization a new object was found through a relationship that was not marked cascade PERSIST

如何將外鍵插入為null? 我要使用@Null,以便當用戶直接向Drfacopt插入記錄時,它不會為null或零,但是如果通過Drfac03f,則可以將其插入為null。 如何才能做到這一點?

當您嘗試em.persist(myObj)並收到錯誤消息:

在同步期間,通過未標記為層疊PERSIST的關系找到了新對象

這意味着您要保留的對象( myObj具有myObj具有[外鍵]關系的字段/屬性 (例如foreignProperty ),並且在myObj之前還沒有foreignPropertyforeignProperty ,也沒有用CascadeType.PERSIST標記該關系。是, 數據庫中尚不存在foreignProperty

解決方案是在設置或設置關系CascadeType.PERSIST 之前持久foreignProperty

如何將外鍵插入為null?

由於要將外部字段設置為null ,因此您不應該在此之前將其持久保存(不需要“持久化”一個null對象)。

因此,只需將字段設置為null並照常繼續執行myObj

我試圖堅持,但收到錯誤“ Null values not allowed in column or variable ...

此錯誤信息表明您試圖將null值持久保存在您無法保存的地方。 有一些可能的原因:

  • 數據庫中的實際列很可能NOT NULL 解決方案:將其設置為NULL
  • 該關系被標記為(optional = false) 解決方案是將optional屬性設置為true或將其完全刪除。 (注意:這可能取決於實現,因此需要確認。)

暫無
暫無

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

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