Как добавить студента с несколькими оценками в базу данных, используя hibernate и javafx - PullRequest
0 голосов
/ 04 января 2019

Я делаю hibernate и Java-проект для учебы, и мне нужна помощь.

Я создаю базу данных учеников, где пользователь может добавить ученика, его оценки, установить группу уроков и предмет.
Когда я добавляю ученика ко всем этим вещам (группа уроков и т. Д.), Это нормально, но когда я хочу поставить тому же ученику другую оценку для того же предмета в результате, я получаю
посмотри здесь с моего phpmyadmin:

enter image description here

Я застрял в этот момент, и у меня нет идеи, как решить эту проблему.

Кнопка добавления студента

addButton.setOnAction((ActionEvent event) -> {
        if (textFieldStudentName.getText() != null && !TextFieldStudentUserName.getText().isEmpty()) {

           int selectedMark = setMark.getSelectionModel().getSelectedIndex();
            selectedMark++;
            String selectedGroup = (String) setGroup.getSelectionModel().getSelectedItem();


            Student student = new Student();
            Subject subject = new Subject();
            Marks mark = new Marks();
            Group group = new Group();

            group.setGroup_name(selectedGroup);
            mark.setMark(selectedMark);
            subject.setSubject_name(subjectField.getText());
            student.setName(textFieldStudentName.getText());
            student.setUserName(TextFieldStudentUserName.getText());
            mark.setStudent(student);
            mark.setSubject(subject);
            student.setGroup(group);


            subjectDAO.create(subject);
            groupDAO.create(group);
            studentDAO.create(student);
            marksDAO.create(mark);

            textFieldStudentName.clear();
            TextFieldStudentUserName.clear();
            subjectField.clear();

        }
    });

Студенческий класс

@Entity
public class Student implements Serializable {

private static final long serialVersionUID = 4L;

@Id
@GenericGenerator(name = "generator", strategy = "increment")
@GeneratedValue(generator = "generator")
@Column(unique = true)
private int student_id;
@Column(length = 15, nullable = false,name="imie")
private String name;
@Column(length = 15, nullable = false,name="nazwisko")
private String UserName;


@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "group_id")
private Group group;


@OneToMany(targetEntity = Marks.class, mappedBy = "student", cascade = CascadeType.REMOVE)
private Set<Marks> marks;

public Student(int student_id, String name, String UserName, Group group, Set<Marks> marks) {
    this.student_id = student_id;
    this.name = name;
    this.UserName = UserName;
    this.group = group;
    this.marks = marks;
}

public Student(){};

public int getStudent_id() {
    return student_id;
}

public void setStudent_id(int student_id) {
    this.student_id = student_id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getUserName() {
    return UserName;
}

public void setUserName(String UserName) {
    this.UserName = UserName;
}

public Group getGroup() {
    return group;
}

public void setGroup(Group group) {
    this.group = group;
}

public Set<Marks> getMarks() {
    return marks;
}

public void setMarks(Set<Marks> marks) {
    this.marks = marks;
}

public int setMark(int selectedMark) {
    return selectedMark;
}

}

Знаки класса

@Entity
@Table(name = "Oceny")
public class Marks implements Serializable {
private static final long serialVersionUID = 2L;



@Id
@GenericGenerator(name = "generator", strategy = "increment")
@GeneratedValue(generator = "generator")
@Column(unique = true)
private long ocena_id;
@Column(name = "ocena")
private int mark;


@ManyToOne(cascade = CascadeType.ALL)
@GeneratedValue
@JoinColumn(name = "subject_id")
private Subject subject;

@ManyToOne(cascade = CascadeType.ALL)
@GeneratedValue
@JoinColumn(name = "student_id")
private Student student;

public Marks(long ocena_id, int mark, Subject subject, Student student) {
    this.ocena_id = ocena_id;
    this.mark = mark;
    this.subject = subject;
    this.student = student;
}
public Marks(){};

public long getOcena_id() {
    return ocena_id;
}

public void setOcena_id(long ocena_id) {
    this.ocena_id = ocena_id;
}

public int getMark() {
    return mark;
}

public void setMark(int mark) {
    this.mark = mark;
}

public Subject getSubject() {
    return subject;
}

public void setSubject(Subject subject) {
    this.subject = subject;
}

public Student getStudent() {
    return student;
}

public void setStudent(Student student) {
    this.student = student;
}

Я не вижу XYZ с несколькими отметками и без дубликатов для предмета, группы уроков и ученика. как я хочу видеть в базе данных Я сделал это вручную в простом классе, но мне нужно сделать это в javafx

public class ProjektPORun {

public static void main(String[] args) {
    Student student1=new Student();
    student1.setName("Adam");
    student1.setUserName("Malysz");
    Student student2=new Student();
    student2.setName("Robert");
    student2.setUserName("Kubica");
    Group grupa=new Group();
    grupa.setGroup_name("LAB1");
    Subject subject=new Subject();
    subject.setSubject_name("History");
    Marks mark=new Marks();
    mark.setMark(1);
    Marks mark1=new Marks();
    mark1.setMark(2);
    Marks mark2=new Marks();
    mark2.setMark(3);

    student1.setGroup(grupa);
    mark.setStudent(student1);
    mark1.setStudent(student1);
    mark.setSubject(subject);

    student2.setGroup(grupa);
    mark1.setStudent(student2);
    mark2.setStudent(student2);
    mark1.setSubject(subject);
    mark2.setSubject(subject);

    Configuration config = new Configuration().configure("META-INF\\hibernate.cfg.xml").addAnnotatedClass(Student.class).addAnnotatedClass(Group.class).addAnnotatedClass(Marks.class).addAnnotatedClass(Subject.class);
    ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
    SessionFactory factory = config.buildSessionFactory(serviceRegistry);

    Session session = factory.openSession();

    Transaction transaction = session.beginTransaction();
    session.save(student2);
    session.save(subject);
    session.save(mark);
    session.save(mark1);
    session.save(mark2);
    session.save(grupa);
    session.save(student1);
    transaction.commit();

    session.close();
    factory.close();
    StandardServiceRegistryBuilder.destroy(serviceRegistry);

}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...