首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WildFly + Hibernate

WildFly + Hibernate
EN

Stack Overflow用户
提问于 2017-01-04 22:57:26
回答 3查看 15.8K关注 0票数 5

几天来,我一直在努力配置Hibernate并在WildFly上运行它。

下面是我的代码:

META-INF/persistence.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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>

用户:

代码语言:javascript
复制
@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;
}

当我加载我的主页时,没有创建任何数据库。

此外,我想持久化一个用户。

代码语言:javascript
复制
@Stateless
public class UserRepositoryImpl implements UserRepository {

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

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

未创建数据库,且实体管理器为空。我需要配置什么才能让它运行?我正在使用IntelliJ进行测试。

EN

回答 3

Stack Overflow用户

发布于 2017-01-09 23:05:23

JTA数据源由jpa容器(在wildfly中)管理。您必须在standalone.xml中定义url、用户名和密码。搜索数据源子系统<subsystem xmlns="urn:jboss:domain:datasources:4.0">并添加数据源定义,例如:

代码语言:javascript
复制
<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将如下所示:

代码语言:javascript
复制
<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>
 </persistence>

在服务器和组件启动期间,观察异常。

票数 10
EN

Stack Overflow用户

发布于 2022-01-16 08:54:01

这个主题有点老了,但是我可以看到,如果您使用RESOURCE_LOCAL数据源,那么对于如何在您的persistence.xml中使用Hibernate连接属性,没有直接的答案:

代码语言:javascript
复制
 <persistence-unit name="umaPuLocal" transaction-type="RESOURCE_LOCAL">

要知道的是,RESOURCE_LOCAL不能利用JTA特性,因此可能会导致数据不一致。

参考:Using Hibernate properties in persistence.xml

票数 -1
EN

Stack Overflow用户

发布于 2017-01-05 19:53:00

在文件persistence.xml中,必须包含要持久化的类

代码语言:javascript
复制
<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>

您可以根据需要包含任意多个类

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41466824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档