Отношение ManyToMany удаляет строки - PullRequest
0 голосов
/ 09 ноября 2011

У меня очень странная ситуация. Я получил класс A и B и отношение ManyToMany так:

класс A.class:

@ManyToMany
    @JoinTable(name="a_b",
            joinColumns={
                @JoinColumn(name="a_id")
        }, inverseJoinColumns={
            @JoinColumn(name="b_id")
    }
    )
private List<B> blist;

B.class:

@ManyToMany
        @JoinTable(name="a_b",
                joinColumns={
                    @JoinColumn(name="b_id")
            }, inverseJoinColumns={
                @JoinColumn(name="a_id")
        }
        )
    private List<A> alist;

когда я обновляю экземпляр класса A, Hibernate удаляет все отношения ('delete from a_b, где a_id =?) В моей базе данных нет правил каскадного типа. Что может быть причиной такой ситуации?

Ответы [ 3 ]

0 голосов
/ 09 ноября 2011

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

@ManyToMany(cascade = CascadeType.ALL)    //Use whatever CascadeType fits your need
0 голосов
/ 09 ноября 2011

Попробуйте использовать следующее сопоставление

A.class

@ManyToMany(targetEntity = B.class)
@JoinTable(name = "a_b",
        joinColumns = @JoinColumn(name = "a_id"),
        inverseJoinColumns = @JoinColumn(name = "b_id"))
private List<B> blist;

B.class

@ManyToMany(mappedBy = "blist", targetEntity = A.class)
private List<A> alist;
0 голосов
/ 09 ноября 2011

Единственное, о чем я могу думать, это то, что вы используете Save, а не SaveOrUpdate.Это тот случай?Классовые аннотации кажутся хорошими, есть кое-что еще, что вызывает проблему.Не могли бы вы опубликовать больше информации?

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