Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Spring: как конвертировать JSON-объект с id внешне

Приветствую.
Имею модели Device -> (many-to-one) -> DeviceType.

Device.java:

Код

@Entity
@Table(name="auto_devices")
@NamedQuery(name="Device.findAll", query="SELECT d FROM Device d")
public class Device implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="adev_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name="adev_code")
    private BigDecimal code;

    @Column(name="adev_last_config")
    private Timestamp lastConfig;

    @Column(name="adev_model")
    private String model;

    //bi-directional many-to-one association to DeviceType
    @ManyToOne
    @JoinColumn(name="adev_type")
    private DeviceType deviceType;

        // тут всякие геттеры-сеттеры...

    /* Сериализуем как ID */
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
    @JsonIdentityReference(alwaysAsId=true)
    public DeviceType getDeviceType() {
        return this.deviceType;
    }

    public void setDeviceType(DeviceType deviceType) {
        this.deviceType = deviceType;
    }

}


DeviceType.java:
Код


@Entity
@Table(name="auto_device_types")
@NamedQuery(name="DeviceType.findAll", query="SELECT d FROM DeviceType d")
public class DeviceType implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="adt_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name="adt_config")
    @Lob
    @Type(type="org.hibernate.type.StringClobType")
    private String config;

    @Column(name="adt_config_time")
    private Timestamp configTime;

    @Column(name="adt_name")
    private String name;

    //bi-directional many-to-one association to Device
    @OneToMany(mappedBy="deviceType", cascade = CascadeType.REMOVE)
    @JsonIgnore
    private List<Device> devices;

    // тут геттеры-сеттеры

}


Для Device генерируется следующий JSON:

Код

[{"id":1,"code":1234567890.00,"lastConfig":null,"model":"TR-200","deviceType":1}]


Собственно, вопрос. Как теперь сделать PUT с таким JSON? Как я понимаю, проблема в том, что вместо deviceType я ставлю его id, а конвертер не может сконвертировать такое, т.к. ожидает там объект. Такой вот контроллер дает мне ошибку 400, что ожидаемо. Но как это обойти?

Код

    @RequestMapping(method = RequestMethod.PUT)
    @ResponseStatus(HttpStatus.OK)
    public void update(@RequestBody Device resource) {
        deviceService.update(resource);
    }


Гуглится решение с использованием JsonDeserializer и вручную преобразовывать json в объект.
Также читал про конвертеры, создать унаследованный от org.springframework.core.convert.converter.Converter класс и в нем преоразовывать из String в DeviceType (т.е. преобразовываем не весь json, а только конкретное поле). Но я что-то не пойму, как его привязать к соответствующему полю.


Это сообщение отредактировал(а) POLTER - 6.8.2014, 21:01
Ответ:
Приветствую.
Имею модели Device -> (many-to-one) -> DeviceType.

Device.java:

Код

@Entity
@Table(name="auto_devices")
@NamedQuery(name="Device.findAll", query="SELECT d FROM Device d")
public class Device implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="adev_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name="adev_code")
    private BigDecimal code;

    @Column(name="adev_last_config")
    private Timestamp lastConfig;

    @Column(name="adev_model")
    private String model;

    //bi-directional many-to-one association to DeviceType
    @ManyToOne
    @JoinColumn(name="adev_type")
    private DeviceType deviceType;

        // тут всякие геттеры-сеттеры...

    /* Сериализуем как ID */
    @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id")
    @JsonIdentityReference(alwaysAsId=true)
    public DeviceType getDeviceType() {
        return this.deviceType;
    }

    public void setDeviceType(DeviceType deviceType) {
        this.deviceType = deviceType;
    }

}


DeviceType.java:
Код


@Entity
@Table(name="auto_device_types")
@NamedQuery(name="DeviceType.findAll", query="SELECT d FROM DeviceType d")
public class DeviceType implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="adt_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name="adt_config")
    @Lob
    @Type(type="org.hibernate.type.StringClobType")
    private String config;

    @Column(name="adt_config_time")
    private Timestamp configTime;

    @Column(name="adt_name")
    private String name;

    //bi-directional many-to-one association to Device
    @OneToMany(mappedBy="deviceType", cascade = CascadeType.REMOVE)
    @JsonIgnore
    private List<Device> devices;

    // тут геттеры-сеттеры

}


Для Device генерируется следующий JSON:

Код

[{"id":1,"code":1234567890.00,"lastConfig":null,"model":"TR-200","deviceType":1}]


Собственно, вопрос. Как теперь сделать PUT с таким JSON? Как я понимаю, проблема в том, что вместо deviceType я ставлю его id, а конвертер не может сконвертировать такое, т.к. ожидает там объект. Такой вот контроллер дает мне ошибку 400, что ожидаемо. Но как это обойти?

Код

    @RequestMapping(method = RequestMethod.PUT)
    @ResponseStatus(HttpStatus.OK)
    public void update(@RequestBody Device resource) {
        deviceService.update(resource);
    }


Гуглится решение с использованием JsonDeserializer и вручную преобразовывать json в объект.
Также читал про конвертеры, создать унаследованный от org.springframework.core.convert.converter.Converter класс и в нем преоразовывать из String в DeviceType (т.е. преобразовываем не весь json, а только конкретное поле). Но я что-то не пойму, как его привязать к соответствующему полю.


Это сообщение отредактировал(а) POLTER - 6.8.2014, 21:01
Вопрос: spring transactionManager в другой библиотеке ... с двумя transactionManager'ами

Добрый день .

Решил вынести общие части в отдельную библиотеку , но ни разу не думал как будет все это работать ?

И так есть jar ( maven) проект с набором entity и Repository

MRepository.jar

@Entity
public class MProperties implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    private Long id;

}

public interface MRepository  {
  MProperties getMProperties ();
}


@Repository
@Transactional
public class MRepositoryImpl implements MRepository {

    @PersistenceContext
    private EntityManager em;

    @Override
    public MRepository getMProperties(){
   }



Над Repository стоит аннотация Transactional

Далее есть основной проект - в нем в pom указал мой MRepository.jar

но в моем проекте есть 2 transactionManager !


@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional("order")
public @interface OrderTx {
}

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional("account")
public @interface AccountTx {
}  
Ответ:
Blazkowicz
Atum1
Решил вынести общие части в отдельную библиотеку

Общие для чего?


ну вот решили что слой Entity|DAO|Repository|

один и решили вынести его в jar ///

а App серверов , которые его используют - они же проекты - много ... так вот пусть этот слой и будет зависимостью ... в каждом из app серверов ...


Atum1
но в моем проекте есть 2 transactionManager !

Назначь один по-умолчанию.


@Primary - конечно хорошо , но ! не работает ... видит 2 transactionManager'a и не знает под каким ему исполняться ...





вот если явно прописать :

@Transactional("account")
и
@PersistenceContext(name="accountPersistenceContext")

в MRepositoryImpl

все ок!

но тогда вопрос ! это нарушение SOLID архитектуры итд ...

откуда либа должна знать имя PersistenceContext и transactionManager под которыми она будет исполняться ????

@Repository
@Transactional("account")
public class MRepositoryImpl implements MRepository {

    @PersistenceContext(name="accountPersistenceContext")
    private EntityManager em;

    @Override
    public MRepository getMProperties(){
   }
Вопрос: Аннотации Spring. Как их обойти?

Подскажите, пожалуйста, как поступить?
У меня есть класс Account, у которого переменные валидируются аннотациями.

@Entity
@Table
@SequenceGenerator(name = "account_seq", sequenceName = "SEQ_ACCOUNT" )
@FieldEquals( field="password", equalsTo="confirmPassword" )
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "account_seq")
private Long id;

@NotEmpty
@Size(max = 50)
private String firstName;

@NotEmpty
@Size(max = 50)
private String lastName;

@NotEmpty
@Size(max = 100)
@Unique(entity=Account.class, property = "login")
private String login;

@NotEmpty
@Size(max = 20)
private String password;

@Transient
@NotEmpty
@Size(max = 20)
private String confirmPassword;


@Size(max = 20)
private String phone;

private int status;

@Temporal(TemporalType.DATE)
private Date creationDate;

@Temporal(TemporalType.DATE)
private Date deleteDate;

@Size(max = 30)
private String authority;


public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public String getLogin() {
return login;
}

public void setLogin(String login) {
this.login = login;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getConfirmPassword() {
return confirmPassword;
}

public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public int getStatus() {
return status;
}

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

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}

public Date getCreationDate() {
return creationDate;
}

public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}

public Date getDeleteDate() {
return deleteDate;
}

public void setDeleteDate(Date deleteDate) {
this.deleteDate = deleteDate;
}


public String getAuthority() {
return authority;
}

public void setAuthority(String authority) {
this.authority = authority;
}
}

Меня интересуют переменные password и confirmPassword.
На странице с Персональными данными, естественно, поля с паролями не отображаются. В jsp -файле их инпуты я прописала с типом hidden (скрыты).
При изменении персональных данных (фамилия, имя, телефон) нужно, собственно, сохранить эти изменения. Но я натыкаюсь на следующую проблему:
При передаче данных с формы скрытые поля тоже проверяются аннотациями. Password подтягивается из бд (а он зашифрован!!!) - возникает ошибка размера поля, более 20 символов. А вот confirmPassword, естественно, пуст, ну и не совпадает с основным паролем.
Подскажите, как быть? Куда рыть? Где искать решение проблемы? Как обойти валидацию этих полей?
Ответ: Главное свойство spring (было по крайней мере) это способность инстанциировать и работать с обычными java классами через xml

Используйте xml или через свой адаптер к этому классу
Вопрос: Архитектура spring mvc

Здравствуйте!
Изучаю spring и запутался.
Подскажите, пожалуйста, как правильно организовать структуру web проекта.
Как я понимаю mvc: "модель" - сущность, поля и методы (бизнес логика), "контроллер" - принимает запросы от пользователя и возвращает ответ или представление, view - отображение данных.
Во многих примерах при работе с бд вижу, что модель представлена так: Entity - описывается сущность с полями, конструктором и геттерами/сеттерами, Repository - интерфейс и его реализация для манипуляции данными сущностями ??? Service - бизнес логика ???
Правильно ли я все понимаю?
Допустим, мое приложение не будет использовать бд, как мне организовать структуру? Например игра крестики-нолики, допустим есть класс поле и игрок, контроллером буду принимать запросы и возвращать шаблон или ответ, а где мне всю логику разместить, где будет инициализироваться поле, проставляться данные, всякие вычисления, проверки и т.д. ?
Спасибо.
Ответ:
psvm
Допустим, мое приложение не будет использовать бд, как мне организовать структуру? Например игра крестики-нолики, допустим есть класс поле и игрок, контроллером буду принимать запросы и возвращать шаблон или ответ, а где мне всю логику разместить, где будет инициализироваться поле, проставляться данные, всякие вычисления, проверки и т.д. ?
Спасибо.


1) Вид (view) может быть как html+js, так и jsp
2) Контроллер сервлеты (в Spring @Controller)
3) Модель это @Repository
Вопрос: Spring MVC: NoSuchBeanDefinitionException

Не получается сконфигурировать...

web.xml

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/applicationcontext.xml, /WEB-INF/spring-security.xml</param-value>
</context-param>


spring.sequrity.xml (никаких варнингов, бин определяется)

<authentication-manager erase-credentials="true">
	<authentication-provider ref="customAuthenticationProvider"></authentication-provider>
</authentication-manager>


spring-servlet.xml

<annotation-driven />
<context:component-scan base-package="org.mvc" />


CustomAuthenticationProvider.java находится в пакете org.mvc.sequrity

@Component
public class CustomAuthenticationProvider implements AuthenticationProvider { ...


в webap/WEB-INF находятся
  • applicationcontext.xml (есть только пустой тег beans:beans)
  • spring-security.xml
  • spring-servlet.xml
  • web.xml

    При запуске ошибка
    автор
    NoSuchBeanDefinitionException: No bean named 'customAuthenticationProvider' is defined


    Думаю, что неправильная конфигурация.
    Как он не находит customAuthenticationProvider, если в spring-security.xml он его определил (не показывает ошибку) ?
    Как правльно сконфигурировать?
  • Ответ:
    rema174
    Андрей0407,

    ну и на том спасибо, а то на стековерфлоу вообще какую-то билеберду плетут и никто ничего внятного не сказал


    Не большой совет.
    Попробуйте настройку Spring-security сделать ч/з аннотации и JavaConfig.
    Как минимум будет уверенность, что они будут работать в одном контексте. :-)
    Вопрос: Конвертация war приложения в Spring boot jar приложение

    Доброй ночи. Скажите ни у кого не возникала необходимость превратить приложение, которое упаковывается в war и деплоиться в Tomcat, в элегантный jar с использованием Spring Boot? Это возможно и иногда нужно?
    Ответ:
    MaxNevermind
    May12
    mad_nazgul, первая половина дела готова (war'ник). Теперь его надо "заспрингбутить". Вопрос покажется странным: что дает spring boot? Я получу некое приложение которое будет запускаться по клику? Я читаю мануал, но хотелось бы пообщаться на эту тему.


    Takes an opinionated view of building production-ready Spring applications. Spring Boot favors convention over configuration and is designed to get you up and running as quickly as possible.
    Вроде как, дает набор дефолтных настроек по умолчанию. Если у вас типовой проект с небольшими отклонениями от дефота, то проще и описать эти отклонения а не писать всю всю конфигурацию вручную.

    Ну и запуск проекта сводиться к
    gradle build && java -jar build/libs/project-0.0.1.jar
    или
    mvn package && java -jar target/project-0.0.1.jar
    
    Вопрос: Spring Tomcat загрузка файлов

    Как сделать загрузку файлов на сервер, а точнее: при загрузке файла, без дополнительных настроек, файлы видно после новой сборки варника. Логически понимаю почему эта ошибка, но где и как писать настройки не представляю.
    Сохраняю файлы в папку веб. Но так же есть задача сохранять файлы на сервер без открытого доступа для просмотра, и тут снова не понятно.
    Ответ: Всем спасибо за советы, много чего стало понятней.
    Ошибка решилась установкой нового сервера, в старом видимо с настройками уже наигрался, а что именно уже не помню.
    Ну и разбираюсь с предложенными вариантами.
    Вопрос: Spring data jpa mysql и ошибка соединения

    Добрый день

    Есть jetty9 деплою на него war файл в нем настройка на базу mysql
    Spring data jpa

    И в логах вижу ошибку

    Could not open joa entitymanager for transaction

    Could not open connection


    И еще access deny для пользователя user@ipмашины

    При этом с этого хоста через утилиту mysql с параметрами бд логином и паролем все отлично коннектится ....
    Ответ:
    Atum1
    spring.datasource.url=jdbc:mysql://host:3306/db_name?useUnicode=true&characterEncoding=utf8
    
    Думаю, что проблема все же в Grant'е. Попробуйте:
    GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
    
    в данном случае user'у можно подключаться с любого хоста.
    Вопрос: Spring Security. Три атрибута авторизации. (Логин+Пароль+Компания)

    Коллеги,
    Есть следующая задача:
    Юзер имеет свой логин и пароль. А так же может иметь третий авторизационный параметр (компания), а может и не иметь.
    Нужно сделать так, чтобы юзер вводил логин\пасс и в случаи если юзер принадлежит к двум или более компаниям выводить ему страницу выбора компании.
    Если же юзер не принадлежит ни одной компании или только к одной не выводить страницу с выбором третьего параметра (компании) и применять какую то умолчательную компанию.
    Мой вопрос заключается в том как такое реализовывается с помощью Spring Security. У меня мыслей кроме two factor authentication нету и я не уверен, что это православный путь реализации такой задачи.
    Был бы благодарен за ссылки чего бы почитать как это пилят в лучших домах Лондона и Парижа :)
    Ответ:
    TepKuH
    Т.е. метод isAuthenticated() в JSP будет возвращать true.

    т.е. это ты сам накосячил?
    Т.к. у спринга много чего есть:
    - механизма голосования основанного на ролях (RoleVoter)
    - Настройка агрегации управления доуступом
    - 25 уже готовых фильтров перед каждым запросом
    - контекст авторизации, который прошит во всех местах кода (проверить твой параметр)
    Много чего есть, я глянул.
    Ты взял базовый фильтр /* url mapping ROLE_USSER и всё?
    А настроить? ))
    Вопрос: Spring обновить версию

    Pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>by.lesharb.springtest</groupId>
    	<artifactId>SpringTest</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>pom</packaging>
    	<modules>
    		<module>JpaTest</module>
    	</modules>
    
    	<properties>
    		<maven.test.failure.ignore>true</maven.test.failure.ignore>
    		<spring.framework.version>3.2.17.RELEASE</spring.framework.version>
    		<hibernate.framework.version>5.2.1.Final</hibernate.framework.version>
    	</properties>
    
    	<dependencies>
    		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>${spring.framework.version}</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-orm</artifactId>
    			<version>${spring.framework.version}</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
    		<dependency>
    			<groupId>org.hibernate</groupId>
    			<artifactId>hibernate-entitymanager</artifactId>
    			<version>${hibernate.framework.version}</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
    		<dependency>
    			<groupId>com.h2database</groupId>
    			<artifactId>h2</artifactId>
    			<version>1.4.192</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    			<version>1.7.12</version>
    		</dependency>
    
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<configuration>
    					<source>1.8</source>
    					<target>1.8</target>
    				</configuration>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    


    app-context.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"
    	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
    		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    	<description>Example configuration to get you started.</description>
    
    	<jdbc:embedded-database id="dataSource" type="H2">
    		<jdbc:script location="classpath:schema.sql" />
    		<jdbc:script location="classpath:test-data.sql" />
    	</jdbc:embedded-database>
    
    	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    		<property name="entityManagerFactory" ref="emf" />
    
    	</bean>
    
    	<tx:annotation-driven transaction-manager="transactionManager" />
    	<bean id="emf"
    		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    		<property name="dataSource" ref="dataSource" />
    		<property name="jpaVendorAdapter">
    			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    		</property>
    		<property name="packagesToScan" value="by.lesharb.springtest.domain" />
    		<property name="jpaProperties">
    			<props>
    				<prop key="hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
    				<prop key="hibernate.max_fetch_depth">3</prop>
    				<prop key="hibernate.jdbc.fetch_size">50</prop>
    				<prop key="hibernate.jdbc.batch_size">10</prop>
    				<prop key="hibernate.show_sql">true</prop>
    			</props>
    		</property>
    	</bean>
    
    	<context:annotation-config />
    
    	<context:component-scan base-package="by.lesharb.springtest.service.jpa" />
    
    </beans>
    


    Бины загружаются
    При попытке обновить версию Spring до 4.3.2 выскакивает ошибка

    2016-08-05 16:40:37,947 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - <Loading XML bean definitions from class path resource [app-context.xml]>
    2016-08-05 16:40:38,123 INFO [org.springframework.context.support.GenericXmlApplicationContext] - <Refreshing org.springframework.context.support.GenericXmlApplicationContext@6ae40994: startup date [Fri Aug 05 16:40:38 EEST 2016]; root of context hierarchy>
    2016-08-05 16:40:38,170 INFO [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - <JSR-330 'javax.inject.Inject' annotation found and supported for autowiring>
    2016-08-05 16:40:38,258 INFO [org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory] - <Creating embedded database 'dataSource'>
    2016-08-05 16:40:38,372 INFO [org.springframework.jdbc.datasource.init.ResourceDatabasePopulator] - <Executing SQL script from class path resource [schema.sql]>
    2016-08-05 16:40:38,412 INFO [org.springframework.jdbc.datasource.init.ResourceDatabasePopulator] - <Done executing SQL script from class path resource [schema.sql] in 40 ms.>
    2016-08-05 16:40:38,413 INFO [org.springframework.jdbc.datasource.init.ResourceDatabasePopulator] - <Executing SQL script from class path resource [test-data.sql]>
    2016-08-05 16:40:38,420 INFO [org.springframework.jdbc.datasource.init.ResourceDatabasePopulator] - <Done executing SQL script from class path resource [test-data.sql] in 7 ms.>
    2016-08-05 16:40:38,424 WARN [org.springframework.context.support.GenericXmlApplicationContext] - <Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in class path resource [app-context.xml]: Cannot create inner bean 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#28d25987' of type [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] while setting bean property 'jpaVendorAdapter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#28d25987' defined in class path resource [app-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence>
    2016-08-05 16:40:38,424 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] - <Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5f282abb: defining beans [dataSource,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,emf,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,jpaContactService,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy>
    Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emf' defined in class path resource [app-context.xml]: Cannot create inner bean 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#28d25987' of type [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter] while setting bean property 'jpaVendorAdapter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#28d25987' defined in class path resource [app-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:287)
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:122)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1419)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1160)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
    	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1123)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:928)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    	at by.lesharb.springtest.JpaTest.main(JpaTest.java:25)
    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter#28d25987' defined in class path resource [app-context.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1039)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:985)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:276)
    	... 13 more
    Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence
    	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:163)
    	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1032)
    	... 17 more
    Caused by: java.lang.NoClassDefFoundError: org/hibernate/ejb/HibernatePersistence
    	at org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter.<init>(HibernateJpaVendorAdapter.java:57)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    	at java.lang.reflect.Constructor.newInstance(Unknown Source)
    	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
    	... 19 more
    Caused by: java.lang.ClassNotFoundException: org.hibernate.ejb.HibernatePersistence
    	at java.net.URLClassLoader.findClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	... 25 more
    


    С чем это связано
    Ответ:
    no56892
    -=Koba=-,
    Может с этим JPA адаптером еще не работает новый хибернейт. По крайней мере spring 4.3.0RC2 и хибернейт 5.1.0.Final - все ок.

    Спасибо