Ошибка при сохранении нескольких отношений сущностей oneToMany в Hibernate - PullRequest
0 голосов
/ 18 января 2019

У меня есть класс сущностей, который имеет два класса сущностей с отношением один ко многим.и есть одна корневая родительская сущность, которая имеет переменную ID, которая расширяется всеми сущностями.Когда я пытаюсь сохранить сущность MessagingEnablerCfg без инициализации ее переменной-члена (messagingProfiles и messagingSessions).это спасается.но если я попытаюсь инициализировать эти переменные набора.он выдает следующую ошибку при выполнении операции сохранения или обновления:

Причина: java.sql.SQLException: поле 'messagingProfiles_id' не имеет значения по умолчанию

Примечание: если в объекте MessagingEnablerCfg есть только одна переменная (либо MessagingProfiles, либо MessagingSessions), то она будет нормально работать для сохранения или обновления.Я чувствую, что это странно, но сейчас это большая проблема для меня.

Пожалуйста, найдите ниже класс Entity

@Entity
//@Indexed
@Proxy(lazy=false)
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class MessagingConfigEntity{

    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    private String id;
    //@Override
    public String getId() {
        return id;
    }
}

другой класс Entity:

@Entity
//@Indexed
@Proxy(lazy=false)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class MessagingEnablerCfg extends MessagingConfigEntity {        
    private String serviceName; 
    @OneToMany(cascade = { CascadeType.ALL}, orphanRemoval = true, fetch = FetchType.EAGER)
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private Set<MessagingProfileCfg> messagingProfiles = new HashSet<>();

    //@OneToMany(cascade = { CascadeType.ALL}, orphanRemoval = true, fetch = FetchType.EAGER)
    @OneToMany(cascade = { CascadeType.ALL}, orphanRemoval = true, fetch = FetchType.EAGER)
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private Set<MessagingSessionCfg> messagingSessions  = new HashSet<>();

    public MessagingEnablerCfg(){

    }
    public MessagingEnablerCfg(String service){
        this.serviceName = service;
    }
    public String getServiceName() {
        return serviceName;
    }
    public void setServiceName(String serviceName) {
        this.serviceName = serviceName;
    }
    public Set<MessagingSessionCfg> getMessagingSessions() {
        return messagingSessions;
    }
    public void setMessagingSessions(Set<MessagingSessionCfg> messagingSessions) 
   {
        this.messagingSessions = messagingSessions;
    }
    public Set<MessagingProfileCfg> getMessagingProfiles() {
        return messagingProfiles;
    }
    public void setMessagingProfiles(Set<MessagingProfileCfg> messagingProfiles) 
    {
        this.messagingProfiles = messagingProfiles;
    }
    public void addSession(MessagingSessionCfg session){
        messagingSessions.add(session);

    }
    public void addProfile(MessagingProfileCfg profile){
        messagingProfiles.add(profile); 
    }
}

Другой дочерний класс:

@Entity
//@Indexed
@Proxy(lazy = false)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class MessagingSessionCfg extends MessagingConfigEntity{

    private String sessionName;
    private String provider;

    public MessagingSessionCfg(){

    }
    public MessagingSessionCfg(String name,String provider){
        this.sessionName = name;
        this.provider = provider;
    }

    public String getSessionName() {
        return sessionName;
    }
    public void setSessionName(String sessionName) {
        this.sessionName = sessionName;
    }
    public String getProvider() {
        return provider;
    }
    public void setProvider(String provider) {
        this.provider = provider;
    }
    public String toString(){
        return "sessionName:"+sessionName+"  provider:"+provider;
    }
}

Ansпоследний дочерний объект:

@Entity
//@Indexed
@Proxy(lazy=false)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
public class MessagingProfileCfg extends MessagingConfigEntity {

    private String profileId;
    private String sourceAddress;

    public MessagingProfileCfg(){

    }
    public MessagingProfileCfg(String profileId, String sourceAddress){
        this.profileId = profileId;
        this.sourceAddress = sourceAddress;
    }
    public String getProfileId() {
        return profileId;
    }
    public void setProfileId(String profileId) {
        this.profileId = profileId;
    }
    public String getSourceAddress() {
        return sourceAddress;
    }
    public void setSourceAddress(String sourceAddress) {
        this.sourceAddress = sourceAddress;
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...