Отображение OneToMany в спящем режиме. Значение приближается к нулю - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть класс ученика, и у меня есть класс Account, который имеет отношение @OneToMany. Один ученик для многих учетных записей. Мои обе таблицы были созданы. В моей учетной записи есть поле Student_id, но значение равно нулю. Не могли бы вы помочь, если я делаю что-то не так.

    import java.util.Collection;
    import java.util.Set;

    import javax.persistence.CascadeType;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToMany;
    import javax.persistence.OneToMany;
    import javax.persistence.OneToOne;
    import javax.persistence.Table;

    @Entity
    @Table(name = "Student_Information")
    public class Student {

        @Id
        private int id;

        @Column
        private String name;


        @OneToOne(targetEntity=Address.class , cascade = CascadeType.ALL)
        @JoinColumn(name="addressId" , referencedColumnName = "addressId")
        private Address adId;

        @OneToMany(mappedBy="student",cascade= CascadeType.ALL)
        private Collection<Account> account;


        @ManyToMany(cascade = CascadeType.ALL)
        @JoinTable(name = "STUDENT_CERTIFICATION", joinColumns = { @JoinColumn(name = "id") }, inverseJoinColumns = { @JoinColumn(name = "certId") })
        private Collection<Certification> certId;


        public Collection<Account> getAccount() {
            return account;
        }

        public void setAccount(Collection<Account> account) {
            this.account = account;
        }

        public Collection<Certification> getCertId() {
            return certId;
        }

        public void setCertId(Collection<Certification> certId) {
            this.certId = certId;
        }


        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Address getAdId() {
            return adId;
        }

        public void setAdId(Address adId) {
            this.adId = adId;
        }

    }

Account Class




import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "Account")
public class Account {

    @Id
    private int accountId;


    @Column
    private String accountNumber;

    @ManyToOne
    @JoinColumn(name="id")
    private Student id;

    public Student getId() {
        return id;
    }

    public void setId(Student id) {
        this.id = id;
    }

    public int getAccountId() {
        return accountId;
    }

    public void setAccountId(int accountId) {
        this.accountId = accountId;
    }

    public String getAccountNumber() {
        return accountNumber;
    }

    public void setAccountNumber(String accountNumber) {
        this.accountNumber = accountNumber;
    }


}

У меня есть ученический класс, и у меня есть класс Account, имеющий отношение @OneToMany. Один ученик для многих учетных записей. Мои обе таблицы были созданы. В моей учетной записи есть поле Student_id, но значение равно нулю. Не могли бы вы помочь, где я делаю не так.

Ответы [ 4 ]

1 голос
/ 13 апреля 2020

Я думаю, что проблема в том, что имя в аннотации столбца соединения, это имя должно совпадать с фактическим именем столбца в вашей таблице, в данном случае, как вы сказали student_id

@ManyToOne
@JoinColumn(name="student_id")
private Student id;
0 голосов
/ 13 апреля 2020

Студент id внутри Account сущности не требуется, у вас должна быть только id для одной учетной записи, например:

// Account class:

@Id
private int account_id; //should not be named 'id'

, а затем присоединитесь к ней с аннотацией @OneToMany в Student сущность:

// Student class:

@Id
private int id;

@JoinColumn(name="id") // student's id
@OneToMany(cascade=CascadeType.ALL)
private Collection<Account> accounts;
0 голосов
/ 13 апреля 2020

попробуйте это, поместите этот код ниже в классе ученика:

    @OneToMany(cascade= CascadeType.ALL, mappedBy="student",)
    private Collection<Account> account;

и поместите эту строку ниже в учетной записи:

    @ManyToOne()
    @JoinColumn(name = "account_id", columnDefinition = "BigInt")
    private Student student;

удачи ...

0 голосов
/ 13 апреля 2020

@OneToMany(mappedBy="student") неверно.

Должно быть @OneToMany(mappedBy="id")

...