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

Java EE (J2EE)

Войти
Регистрация
Восстановить пароль
 
Alradalion
95 / 95 / 43
Регистрация: 13.09.2013
Сообщений: 383
#1

Hibernate транзакции - Java EE

18.12.2016, 18:18. Просмотров 228. Ответов 6
Метки нет (Все метки)

Продолжаю мучить Hibernate

Есть класс конфигурации
Кликните здесь для просмотра всего текста
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package com.example.configuration;
 
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.AbstractJpaVendorAdapter;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import com.example.repository.Marker;
 
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.beans.PropertyVetoException;
import java.util.Properties;
 
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackageClasses = Marker.class)
@ComponentScan({"com.example"})
public class DataBase {
 
    @Bean
    public DataSource dataSource() {
        return new DriverManagerDataSource("jdbc:h2:~/test", "sa", "");
    }
 
    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        AbstractJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        adapter.setShowSql(true);
        adapter.setGenerateDdl(true);
        return adapter;
    }
 
    @Bean
    public EntityManagerFactory entityManagerFactory(DataSource dataSource,
                                                     JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean factory =
                new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(jpaVendorAdapter);
        factory.setPackagesToScan("com/example/domain");
        factory.setDataSource(dataSource);
        factory.setJpaProperties(jpaProperties());
        factory.afterPropertiesSet();
        return factory.getObject();
    }
 
    private Properties jpaProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
        return properties;
    }
 
    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf)
            throws PropertyVetoException {
        return new JpaTransactionManager(emf);
    }
}


2 класса Book и Library и репозитории к ним.
А так же класс для добавления, удалени и т.д. книг из библиотеки
Кликните здесь для просмотра всего текста
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@Component
public class UserLibraryImpl implements UserLibrary {
 
    @Autowired
    private BookRepo bookRepo;
 
    @Autowired
    private LibraryRepo libraryRepo;
    private Library library;
    private Long idUser;
 
    public void setIdUser(Long idUser) {
        this.idUser = idUser;
    }
 
 
    public UserLibraryImpl(){}
    public UserLibraryImpl(Long idUser) {
        this.idUser=idUser;
    }
 
    @Override
    public void addBook(Book book) {
        library = libraryRepo.findByIdUser(idUser);
 
        Book bookForLibraray =bookRepo.save(book);
 
        library.getBookList().add(bookForLibraray);
 
    }
 
    @Override
    public Book findBookForAll(String name) {
        return null;
    }
 
    @Override
    public Book findBook(String name) {
        return null;
    }
 
    @Override
    public void deleteBook(Book book) {
 
    }
 
    @Override
    public void editBook(Book book) {
 
    }
 
    @Override
    public void showAll() {
 
    }
 
 
}


Написал класс Application
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
import com.example.configuration.MainConfig;
import com.example.domain.Book;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
 
public class Application {
    public static void main(String[] args) {
 
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
 
        ctx.register(MainConfig.class);
        ctx.refresh();
 
        UserLibraryImpl library = (UserLibraryImpl) ctx.getBean(UserLibrary.class);
        library.setIdUser(1L);
 
 
        Book book = new Book("Иванов", "Кто же мы");
 
 
        library.addBook(book);
        ctx.close();
    }
  }
И если книга у меня сохраняется в свою таблицу, то вот в таблицу library-books - нет. Как мне сказали, надо навесить транзакции. Но если я ставлю @Transactional над методом addBook класса UserLibraryImpl, то ловлю ошибку:
Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy37 cannot be cast to com.example.UserLibraryImpl

Честно говоря не очень понимаю, как мне в моей конфигурации прикрутить транзакции
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KEKCoGEN
Эксперт Java
1886 / 1764 / 430
Регистрация: 28.12.2010
Сообщений: 7,129
18.12.2016, 19:02     Hibernate транзакции #2
Alradalion, попробуйте добавить аннотацию @EnableAspectJAutoProxy в класс конфига. Это позволит использовать транзакции
Alradalion
95 / 95 / 43
Регистрация: 13.09.2013
Сообщений: 383
18.12.2016, 19:26  [ТС]     Hibernate транзакции #3
KEKCoGEN,
вылезает ошибка:
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
37
38
39
40
41
42
43
44
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userLibraryImpl' defined in file [E:\SbRep\transaction\target\classes\com\example\UserLibraryImpl.class]: Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
    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.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:775)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
    at com.example.Application.main(Application.java:16)
    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: java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.springframework.aop.aspectj.autoproxy.AspectJAwareAdvisorAutoProxyCreator.sortAdvisors(AspectJAwareAdvisorAutoProxyCreator.java:73)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.findEligibleAdvisors(AbstractAdvisorAutoProxyCreator.java:91)
    at org.springframework.aop.framework.autoproxy.AbstractAdvisorAutoProxyCreator.getAdvicesAndAdvisorsForBean(AbstractAdvisorAutoProxyCreator.java:69)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:347)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:299)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    ... 14 more
Caused by: java.lang.ClassNotFoundException: org.aspectj.util.PartialOrder$PartialComparable
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 34 more
KEKCoGEN
Эксперт Java
1886 / 1764 / 430
Регистрация: 28.12.2010
Сообщений: 7,129
18.12.2016, 21:11     Hibernate транзакции #4
Цитата Сообщение от Alradalion Посмотреть сообщение
java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable
депенденси добавьте. http://mvnrepository.com/artifact/or.../aspectjweaver
Читайте что вам пишут в ошибке.
Alradalion
95 / 95 / 43
Регистрация: 13.09.2013
Сообщений: 383
18.12.2016, 21:24  [ТС]     Hibernate транзакции #5
KEKCoGEN, подключил.
Java
1
2
3
4
5
6
     
<dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
</dependency>
Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy36 cannot be cast to com.example.UserLibraryImpl
KEKCoGEN
Эксперт Java
1886 / 1764 / 430
Регистрация: 28.12.2010
Сообщений: 7,129
18.12.2016, 22:11     Hibernate транзакции #6
Alradalion, есть ещё какая то аннотация. Что то про Autowaving или что-то тип того. Помню у меня была такая проблема я её так решал.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2016, 23:38     Hibernate транзакции
Еще ссылки по теме:

Hibernate @Formula Java EE
Hibernate Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister Java EE
Java EE Spring + Hibernate
Транзакции Hibernate Java EE
Hibernate Java EE

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

Или воспользуйтесь поиском по форуму:
Alradalion
95 / 95 / 43
Регистрация: 13.09.2013
Сообщений: 383
18.12.2016, 23:38  [ТС]     Hibernate транзакции #7
KEKCoGEN, решил. Вернее, помогли
Я из-за сеттера setIdUser решил привести UserLibrary к UserLibraryImpl, а стоило вынести его в интерфейс и создавать бин UserLibrary
Java
1
2
UserLibraryImpl library = (UserLibraryImpl) ctx.getBean(UserLibrary.class);
library.setIdUser(1L);
Yandex
Объявления
18.12.2016, 23:38     Hibernate транзакции
Ответ Создать тему
Опции темы

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