OneToMany, ManyToOne, почему значение parent у детей равно нулю? - PullRequest
1 голос
/ 15 марта 2011

Я читаю похожие вопросы, но все еще имею проблемы.

Информация о конфигурации: Hibernate 3.5.1

Вопрос родительского класса:

@Entity
public class Question implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="questionId")
    private long id;
    private String title;
    private String description;

    @OneToMany(cascade=CascadeType.ALL, mappedBy="question")
    private Set<Vote> votes;

    public void addVote(Vote vote){
        if(votes==null)
            votes = new HashSet<Vote>();
        getVotes().add(vote);
    }

}

Дочерний класс Голосовать:

@Entity
public class Vote implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="voteId")
    private long id;

    private transient InetAddress address;

    @ManyToOne
    @JoinColumn(name="questionId")
    private Question question;

    @Enumerated(EnumType.STRING)
    private Mode mode;

// ...
}

И, наконец, очень простой тест:

@Test
public void testSaveOrUpdate() {
Vote vote1 = new Vote();
    vote1.setAddress(InetAddress.getLocalHost());
    vote1.setMode(Mode.HIM);
    question = new Question();
    question.setTitle("test?");
    question.setDescription("test");
    question.addVote(vote1);

    question2 = questionDao.saveOrUpdate(question);
    assertNotNull(question2);
    Set<Vote> votes = question.getVotes();
    assertEquals(votes.size(), 1);
    for(Vote vote:votes)
        assertNotNull(vote.getQuestion());
}

тест не пройден, потому что voice.getQuestion () возвращает ноль.Когда я проверяю в БД, в столбце questionId есть ноль.Мой вопрос заключается в том, что я должен сделать, чтобы иметь ссылку на вопрос при голосовании при голосах ?что-то не так с отображением, но я понятия не имею, что.

1 Ответ

1 голос
/ 15 марта 2011

Во всех отношениях есть собственная сторона (по крайней мере, в ORM). В вашем случае «многие-к-одному» вы сделали Голосование как сторону-хозяина. Это означает, что голосование связано с вопросом. Следовательно, question.addVote (voice1) не будет работать, а вот voice.setQuestion (вопрос) заставит все работать. Голосование является стороной-владельцем, так как вы объявили JoinColumn на этой стороне и поле mappedBy на стороне вопроса.

Редактировать: И теперь вы должны сохранить объект голосования, а не объект вопроса, чтобы иметь какой-либо эффект.

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