аннотация один к одному не вставляет внешний ключ в таблицу - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь добавить информацию в 2 таблицы с аннотацией один к одному.enter image description here

enter image description here

Как вы можете видеть, voice_id и voter_sinNumber не вставляют внешние ключи.вот мои методы dao.java

public void addVoter(Voter voter) { 
        Session session = sessionFactory.openSession();
        session.beginTransaction();

        session.save(voter);

        session.getTransaction().commit();
        session.close();    
    }


    public void addVote(Votes votes) {  
        Session session = sessionFactory.openSession();
        session.beginTransaction();


        Voter voter = new Voter();
        voter.setVotes(votes);
        votes.setVoter(voter);

        session.save(votes);

        session.getTransaction().commit();
        session.close();    
    }

И вот как я провозглашаю Избиратель и голоса:

Votes.java:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Votes implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    private int id;

    private String party;

    public Votes(String party) {
        this.party = party;
}

    @OneToOne
    private Voter voter;


}

Voter.java:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@NamedQuery(name="Voter.byName", query="from Voter where sinNumber=:sinNumber")
public class Voter implements Serializable{
    @Id
    private int sinNumber;

    private String fname;
    private String lname;
    private int year; 
    private int month; 
    private int day; 

    private String address;


    @OneToOne
    private Votes votes;


    public Voter(int sinNumber, String fname, String lname, 
            int year, int month, int day, String address) {
        this.sinNumber = sinNumber;
        this.fname = fname;
        this.lname = lname;
        this.year = year;
        this.month = month;
        this.day = day;
        this.address = address;
    }


    public Voter(String fname, String lname, int year, int month, int day, 
            String address, Votes votes) {
        this.fname = fname;
        this.lname = lname;
        this.year = year;
        this.month = month;
        this.day = day;
        this.address = address;
        this.votes = votes;
    }


}

Выдает ошибку:

java.sql.SQLIntegrityConstraintViolationException: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (hibernatedb. votes,ОГРАНИЧЕНИЕ FKdyr88aepaxedeiivxepemku28 ИНОСТРАННЫЙ КЛЮЧ (voter_sinNumber) ССЫЛКИ voter (sinnumber))

1 Ответ

0 голосов
/ 03 марта 2019

Вам необходимо каскадно изменить:

// On Voter side
@OneToOne(cascade=CascadeType.ALL)
private Votes votes;

// On Votes side
@OneToOne(cascade=CascadeType.ALL)
private Voter voter;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...