JPA пустые таблицы и таблицы соединений - PullRequest
0 голосов
/ 23 сентября 2010

Я знаю, что truncate не поддерживается, поэтому я делаю Delete from table - это работает довольно хорошо, но таблицы соединений не очищаются таким образом.Пример:

Delete from Product;
Delete from Service;

оба пустые, таблица service_product все еще заполнена.Есть ли шанс очистить мои таблицы соединений без использования sql?

пример сущности

public class Service implements Serializable {
    private static final long serialVersionUID = 4520872456865907866L;
    // seam-gen attributes (you should probably edit these)

    @EmbeddedId
    private ServiceId id;

    @Length(max = 255)
    private String servicename;

    @Column(columnDefinition = "text")
    private String highlightsText;
    @Column(columnDefinition = "text")
    private String detailsText;
    @Column(columnDefinition = "text")
    private String productText;
    @Column(columnDefinition = "text")
    private String dataText;

    @ManyToMany(mappedBy = "services")
    private Set<Machine> machines;

    @OneToMany(targetEntity = ServiceDownload.class, cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
    private List<ServiceDownload> serviceDownloads;

    @OneToMany(targetEntity = ProductSpecial.class, cascade = { CascadeType.ALL })
    private List<ProductSpecial> productSpecials;

    @OneToOne(cascade = { CascadeType.ALL })
    private ServicePicture servicePicture;
...
}

Ответы [ 2 ]

0 голосов
/ 23 сентября 2010

Вы должны добавить аннотацию @OnDelete (action = OnDeleteAction.CASCADE). Поэтому, если вы используете Hibernate, попробуйте:

@OneToMany(targetEntity = ServiceDownload.class, cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
@OnDelete(action=OnDeleteAction.CASCADE)
private List<ServiceDownload> serviceDownloads;

См. http://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html для некоторых примеров и документации.

0 голосов
/ 23 сентября 2010
  • Вы должны получить полную таблицу (FROM Product), выполнить итерации объектов и удалить их, используя session.delete(..)
  • DELETE не запускает каскады
  • truncate поддерживается, если это собственный запрос SQL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...