Два представления одного и того же объекта - проблема гибернации - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть оператор select, который загружается в класс Folders с отношением один-ко-многим с File. Хотя иногда это происходит без ошибок, иногда возникает ошибка Hibernate, говорящая о том, что мое использование сессии небезопасно или что было два представления одной и той же коллекции Folders.file. Что я делаю неправильно? Спасибо за вашу помощь!

Folders.java

   @Entity
   @Table(name= "folders")

   public class Folders implements Serializable{
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "folder_code")
    private Integer folderCode;

    @Column(name = "assign_code")
    private Integer assignCode;

    public Set<File> getFile() {
        return file;
    }


    public void setFile(Set<file> assignments) {
        this.file = file;
    }


    @OneToMany(targetEntity=File.class,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
    @JoinColumn(name="assign_code",referencedColumnName="assign_code")
    Set<Folder> folder;

    public Integer getAssignCode() {
        return assignCode;
    }


    public void setAssignCode(Integer assignCode) {
        this.assignCode = assignCode;
    }

    public Integer getFolderCode() {
        return folderCode;
    }

    public void setFolderCode(Integer folderCode) {
        this.folderCode = folderCode;
    }

    public Date retrieveFileStartDate(){
        List<File> file;
        if(this.getFile()!=null){
            file= new ArrayList<File>(this.getFile());
        }else{
            file = new ArrayList<File>();
        }
        return file.size()>0 ? new 
        Date(file.get(0).getStartDate()): null;
    }



}

File.java

@Entity
@Table(name= "file")

public class File implements Serializable{
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "assign_code")
    private Integer assignCode;


    @Column(name = "start_date")
    private String startDate;

    @Column(name = "end_date")
    private String endDate;


    public Integer getAssignCode() {
        return assignCode;
    }


    public void setAssignCode(Integer assignCode) {
        this.assignCode = assignCode;
    }


    public String getStartDate() {
        return startDate;
    }


    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }


    public String getEndDate() {
        return endDate;
    }


    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }



}

1 Ответ

0 голосов
/ 13 ноября 2018

Я не уверен насчет ошибки, которую вы получаете, но, глядя на ваши сущности, могу сказать, что отображение отношений неверно.

Вы отображаете @OneToMany в сущности папки, но как насчет @ManyToOne в сущности файла?

также определите атрибут mappedBy, чтобы он работал ожидаемым образом.

Folder.java

@OneToMany(targetEntity=File.class,cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="file")
@JoinColumn(name="assign_code",referencedColumnName="assign_code")
private Set<Folder> folder;

File.java

@ManyToOne
private File file;
//getter and setter
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...