2013-11-11 2 views
0

У меня есть эта автообъединение сущность:Hibernate многие-к-одному автообъединение обновление ассоциации каскад не работает

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

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(unique = true, nullable = false) 
    private Long idPackageTemplate; 

    private Byte status; 

    // bi-directional many-to-one association to PackageTemplate 
    @ManyToOne(fetch = FetchType.LAZY, cascade = { CascadeType.ALL }) 
    @JoinColumn(name = "packageTemplate") 
    private PackageTemplate packageTemplate; 

    // bi-directional many-to-one association to PackageTemplate 
    @OneToMany(mappedBy = "packageTemplate", cascade = { CascadeType.ALL }) 
    @JoinTable(name = "PackageTemplate", joinColumns = { @JoinColumn(name = "packageTemplate", nullable = true) }, inverseJoinColumns = { @JoinColumn(name = "idPackageTemplate", nullable = false) }) 
    private List<PackageTemplate> packageTemplateList; 

    public PackageTemplate() { 
    } 

    public Long getIdPackageTemplate() { 
     return this.idPackageTemplate; 
    } 

    public Byte getStatus() { 
     return this.status; 
    } 

    public void setStatus(Byte status) { 
     this.status = status; 
    } 

    public PackageTemplate getPackageTemplate() { 
     return this.packageTemplate; 
    } 

    public void setPackageTemplate(PackageTemplate packageTemplate) { 
     this.packageTemplate = packageTemplate; 
    } 

    public List<PackageTemplate> getPackageTemplateList() { 
     return this.packageTemplateList; 
    } 

    public void setPackageTemplateList(List<PackageTemplate> packageTemplateList) { 
     this.packageTemplateList = packageTemplateList; 
    } 
} 

Когда я обновлю packageTemplate настройки PackageTemplateList, она это не распространяется работы. Связанные вещи сохраняют отношения с отцом.

Ошибок не видно, просто кажется, что каскад ничего не делает.

Любая идея?


решаемые, JB Nizet был прав. Проблема заключалась в «mappedBy in packageTemplateList».

Код должен быть что-то вроде этого:

// bi-directional many-to-one association to PackageTemplate 
@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "packageTemplate") 
private PackageTemplate packageTemplate; 

// bi-directional many-to-one association to PackageTemplate 
@OneToMany 
@JoinColumn(name = "packageTemplate") 
private List<PackageTemplate> packageTemplateList; 

Этот код теперь работает.

+1

Покажите нам свой код (код, который создает и добавляет шаблоны пакетов), и исправьте свое сопоставление. 'mappedBy' означает: отображение этой ассоциации находится на другой стороне ассоциации. Поэтому у вас не должно быть аннотации JoinTable на packageTemplateList. См. Http://stackoverflow.com/questions/19896025/understanding-annotations-and-jpahibernate/19896470#19896470 –

ответ

0

Я подозреваю, что вам не удалось установить обратную ссылку на детей родителям.

Этого можно добиться с помощью следующего кода в методе setPackageTemplateList.

public void setPackageTemplateList(List<PackageTemplate> packageTemplateList) { 

    for(PackageTemplate template : PackageTemplateList) { 
     template.setPackageTemplate(this); 
    } 
    this.packageTemplateList = packageTemplateList; 
} 
Смежные вопросы