Форум программистов, компьютерный форум CyberForum.ru

Java и базы данных

Войти
Регистрация
Восстановить пароль
 
kostrorod
39 / 28 / 6
Регистрация: 14.04.2012
Сообщений: 244
#1

Удаление Entity из БД - Java БД

22.11.2016, 10:40. Просмотров 347. Ответов 7

Имеется класс User
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@Entity
@Table(name = "users", uniqueConstraints={@UniqueConstraint(columnNames={"name"})})
public class User extends NamedEntity {
    @Column(name = "email", nullable = false, unique = true)
    @Email
    @NotEmpty
    private String email;
 
    @Column(name = "password", nullable = false)
    @NotEmpty
    @Length(min = 5)
    private String password;
 
    @Column(name = "enabled", nullable = false)
    private boolean enabled = true;
 
    @Column(name = "registered", columnDefinition = "timestamp default now()")
    private Date registered = new Date();
 
    @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = Role.class)
    @CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"))
    @Column(name = "role")
    private Set<Role> roles = new HashSet<Role>();
 
    @Column(name = "firstName")
    private String firstName;
 
    @Column(name = "LastName")
    private String LastName;
 
    @Column(name = "address")
    private String address;
 
    public User() {
    }

При удалении методом
Кликните здесь для просмотра всего текста
Java
1
2
3
4
  @Transactional
    @Modifying
    @Query("DELETE FROM User u WHERE u.id=:id ")
    int delete(@Param("id") int id);

возникает ошибка, что ограниечение внешнего ключа, имеется ссылка (Usera) на таблицу user_roles (таблица создаётся по полю private Set<Role> roles)

Как удалить Usera и все его дочерние таблицы? Может нужно дополниельные анатации прописать?

Spring Data Jpa
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2016, 10:40     Удаление Entity из БД
Посмотрите здесь:

Entity Mapping - Java БД
Всем доброго времени суток. Пишу проект на Java, мне Эклипс подчеркивает строку в XML, что я не так делаю? Я просто новичок и мало об этом...

Hibernate projection for nested entity - Java БД
Добрый день! Возникла такая проблемка. У меня есть две таблицы с кучей полей, связаны один-к-одному. Хочу я вытянуть только первую,...

PostgreSQL Не проходит тест удаления Entity из БД по id - Java БД
Не проходит тест удаления Entity из базы данных (где данные существуют, тест get проходит) по id Entity: @Entity @Table(name =...

Аннотация @Version для сущностей (Entity) - Java БД
В книге по spring написано что для того чтобы Hibernate разбирался с различными версиями объектов что ему присылают чтобы таким образом...

Использование CMP Entity Bean с JDBC2.0 - Java БД
Возможно ли такое на BAS4.5 (ну или как это делается хоть где - нибудь)??? При создании дескриптора доставки на каждый СМР - бин...

Когда JPA(hibernate) использует equals/hashcode у entity - Java БД
Что-то я совсем запутался когда они должны вызываться, подскажите пожалуйста. Добавлено через 102 часа 59 минут Наверное я непонятно...

JPA entity manager: немогу поймать исключение при вставке/обновлении данных - Java БД
В моём проекте используется jpa и его entity manager (поставщик - hibernate), проблема в том что я не могу поймать исключение там где мне...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KEKCoGEN
Эксперт Java
1897 / 1775 / 432
Регистрация: 28.12.2010
Сообщений: 7,163
22.11.2016, 11:11     Удаление Entity из БД #2
kostrorod, во-первых в спринг дата нет нужны писать такое удаление как у вас. Оно там уже реализовано.
Вто-вторых хорошей практикой является "мягкое" удаление. То есть вы добавляете в юезр поле deleted(boolean) и выставляете его в true когда удаляете юзера. Соответственно везде где вы получаете юзеров вы должны фильтровать по этому флагу.

Если же очень хочется удалить все и вся, вам надо указать это в вашей аннотации маппинга. Примерно так

Java
1
OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
kostrorod
39 / 28 / 6
Регистрация: 14.04.2012
Сообщений: 244
22.11.2016, 11:38  [ТС]     Удаление Entity из БД #3
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
в спринг дата нет нужны писать такое удаление как у вас. Оно там уже реализовано
Там реализовано void delete, а мне нужно узнать прошло ли корректно удаление.
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
хорошей практикой является "мягкое" удаление
Получается, что юзер не удаляется из БД, а просто скрывается?
KEKCoGEN
Эксперт Java
1897 / 1775 / 432
Регистрация: 28.12.2010
Сообщений: 7,163
22.11.2016, 11:55     Удаление Entity из БД #4
Цитата Сообщение от kostrorod Посмотреть сообщение
ам реализовано void delete, а мне нужно узнать прошло ли корректно удаление.
если удаление не произойдет, вылетит исключение.

Цитата Сообщение от kostrorod Посмотреть сообщение
Получается, что юзер не удаляется из БД, а просто скрывается?
да
kostrorod
39 / 28 / 6
Регистрация: 14.04.2012
Сообщений: 244
22.11.2016, 11:55  [ТС]     Удаление Entity из БД #5
При добавлении OneToMany
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
 @Enumerated(EnumType.STRING)
    @ElementCollection(targetClass = Role.class)
    @CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"))
    @OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
    @Column(name = "role")
    private Set<Role> roles = new HashSet<Role>();

возникает ошибка
Кликните здесь для просмотра всего текста
java.lang.IllegalStateException: Failed to load ApplicationContext

at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in class path resource [spring/spring-config.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: model.User.roles[model.Role]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:851)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:108)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:251)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
... 29 more
Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: model.User.roles[model.Role]
at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1223)
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:800)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:725)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1621)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1589)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:338)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 44 more
KEKCoGEN
Эксперт Java
1897 / 1775 / 432
Регистрация: 28.12.2010
Сообщений: 7,163
22.11.2016, 12:00     Удаление Entity из БД #6
Цитата Сообщение от kostrorod Посмотреть сообщение
Use of @OneToMany or @ManyToMany targeting an unmapped class: model.User.roles[model.Role]
this
kostrorod
39 / 28 / 6
Регистрация: 14.04.2012
Сообщений: 244
22.11.2016, 12:13  [ТС]     Удаление Entity из БД #7
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
this
это enum
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2016, 12:16     Удаление Entity из БД
Еще ссылки по теме:

MySQL Hibernate "Unknown entity: fed.guman.User" - Java БД
Добрый вечер. Собственно столкнулся с экзепшеном - &quot;Unknown entity: fed.guman.User&quot; Далее код программы. Только начал разбираться с...

@OneToOne or @ManyToOne on `my entity#1` references an unknown entity `my entity#2` - Java EE
Привет всем! У меня появилась такая ошибка когда я работаю с двумя базами, именно когда делаю save в другую базу сущность первой, ...

Каскадное удаление в Entity Framework - C#
Сегодня наткнулся на такую беду: entity framework каскадно удаляет только те сущности, которые уже были загружены заранее. Можно ли как-то...

Entity Framework Code First Каскадное удаление - C#
Создал базу данных с помощью Entity Framework Code First: namespace Portal.Models { public class Photo { ...

Entity Framework, как правильно убрать каскадное удаление в моем случае? - C# MVC
public class Task : BaseIntity { public string Name { get; set; } ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
KEKCoGEN
Эксперт Java
1897 / 1775 / 432
Регистрация: 28.12.2010
Сообщений: 7,163
22.11.2016, 12:16     Удаление Entity из БД #8
kostrorod, у вас есть три варианта
1. Использовать soft delete
2. Сделать Role entity
3. Гуглить можно ли решить вашу проблему не создавая класс Role (таблица все равно создается полагаю)

Я бы на вашем месте выбрал первый вариант.
Yandex
Объявления
22.11.2016, 12:16     Удаление Entity из БД
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru