2017-01-04 5 views
1

Я боролся в течение нескольких дней с настройкой Hibernate и запускал его на WildFly.WildFly + Hibernate

Вот мой код:

META-INF/persistence.xml

<persistence version="1.0" 
     xmlns="http://java.sun.com/xml/ns/persistence" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 

<persistence-unit name="blog" transaction-type="JTA"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

    <properties> 
     <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/blog?createDatabaseIfNotExist=true"/> 
     <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
     <property name="hibernate.connection.username" value="abc"/> 
     <property name="hibernate.connection.password" value="abc"/> 
     <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
     <property name="hibernate.hbm2ddl.auto" value="create"/> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="jboss.as.jpa.providerModule" value="org.hibernate:5.0"/> 
    </properties> 

</persistence-unit> 

pom.xml

<dependencies> 

    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>7.0</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.1-api</artifactId> 
     <version>1.0.0.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.2.2.Final</version> 
    </dependency> 

    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.38</version> 
    </dependency> 

</dependencies> 

<properties> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
</properties> 

Пользователь:

@Entity 
@Table(name = "users") 
public class User { 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private long id; 

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

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

@OneToMany(mappedBy = "user") 
private Set<Post> posts; 
} 

Когда я загружаю главную страницу, база данных не создается.

Кроме того, я хочу сохранить пользователя.

@Stateless 
public class UserRepositoryImpl implements UserRepository { 

@PersistenceContext(unitName = "blog") 
private EntityManager entityManager; 

public void create(User user) { 
    this.entityManager.persist(user); 
} 
} 

База данных не создается, а диспетчер сущностей не имеет значения. Что мне нужно настроить для его запуска? Я использую IntelliJ для тестирования.

+2

Прежде всего, при использовании типа транзакции типа JTA, данные о соединении с базой данных не должны находиться в файле 'persistence.xml'. Они должны находиться в 'standalone.xml' от вашего WilfFly. Тогда 'persistence.xml' просто ссылается на него. –

+0

Я предполагаю, что что-то еще в корне нарушено. Я не могу найти хороший учебник, как это сделать. Я оставляю это сейчас. Спасибо –

+0

Проблема, вероятно, в том, как вы используете UserRepositoryImpl. Как и в: бит кода, который вы здесь не представили. По-видимому, контейнер JEE не запускается для фактического ввода экземпляра entityManager и, таким образом, запускает контекст персистентности, который я могу только предполагать, означает, что USerRepositoryImpl не инициализирован как правильный экземпляр EJB. – Gimby

ответ

-2

В файле persistence.xml вы должны включать в себя класс упорствовать

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

<class>package.User<class> 

<properties> 
    <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/blog?createDatabaseIfNotExist=true"/> 
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
    <property name="hibernate.connection.username" value="abc"/> 
    <property name="hibernate.connection.password" value="abc"/> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
    <property name="hibernate.hbm2ddl.auto" value="create"/> 
    <property name="hibernate.show_sql" value="true"/> 
    <property name="jboss.as.jpa.providerModule" value="org.hibernate:5.0"/> 
</properties> 

Вы можете включать в себя столько классов, сколько вам нравится

+1

Нет, нет, в контейнере JEE, как объекты Wildfly, автоматически обнаруживаются при развертывании приложения. – Gimby

4

JTA DataSource управляется JPA контейнер (внутри wildfly). Вы должны указать URL-адрес, имя пользователя и пароль в файле standalone.xml. Поиск подсистемы DataSources <subsystem xmlns="urn:jboss:domain:datasources:4.0"> и добавить определение источника данных, например:

<datasource jta="true" jndi-name="java:/jdbc/myDS" pool-name="MyDS" enabled="true" use-java-context="true" use-ccm="true"> 
       <connection-url>jdbc:mysql://localhost:3306/blog</connection-url> 
       <driver>mysqldriver.jar</driver> 
       <security> 
        <user-name>username</user-name> 
        <password>password</password> 
       </security> 
      </datasource> 

Далее необходимо создать модуль для вашего драйвера базы данных. Для получения подробной информации обратитесь к документации: https://docs.jboss.org/author/display/WFLY8/DataSource+configuration

Тогда ваш persistence.xml будет выглядеть следующим образом:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence 
     http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
version="2.1"> 
<persistence-unit name="blog"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <jta-data-source>jdbc/myDS</jta-data-source> 
    <properties> 
     <property name="hibernate.archive.autodetection" value="class" /> 
     property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
    <property name="hibernate.hbm2ddl.auto" value="create"/> 
    <property name="hibernate.show_sql" value="true"/> 
    </properties> 
</persistence-unit> 

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

 Смежные вопросы

  • Нет связанных вопросов^_^