gpt4 book ai didi

java - 无法从实体类 Hibernate 4.2.7 Websphere 8.5.5 oracle 11g 创建表

转载 作者:行者123 更新时间:2023-12-02 04:34:07 25 4
gpt4 key购买 nike

我在自动从 @Entity 类创建表时遇到问题。当我手动创建表时一切正常。我可以注入(inject)entityManager等等。我找到了很多解决方案,例如 this但对我不起作用。我的配置:persistence.xml

    <persistence-unit name="entityManagerFactory"
transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jdbc/oracleTest</jta-data-source>
<class>pl.example.was.test.entity.ResourceEntity</class>

<properties>
<property name="packagesToScan" value="pl.example.was.test.entity" />
<property name="hibernate.archive.autodetection" value="class, hbm" />
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="show_sql" value="true" />
<property name="format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="true" />

<property name="hibernate.transaction.factory_class"
value="org.hibernate.transaction.CMTTransactionFactory" />
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup" />
</properties>
</persistence-unit>

实体类的一部分

@Entity
public class ResourceEntity implements Serializable {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private String name;
// getters setters //

注入(inject)EntityManager

@PersistenceContext
private EntityManager em;

我正在创建两个测试方法

public void addResource(ResourceEntity selectedResource, Locale locale) {
selectedResource.setLocale(locale.toString());
try{
Session session = em.unwrap(Session.class);
Transaction tx = session.beginTransaction();
session.save(selectedResource);
session.flush();
session.clear();
tx.commit();
session.close();
}catch (Exception ex){
ex.printStackTrace();
}
}

public void addResource2(ResourceEntity selectedResource, Locale locale) {
selectedResource.setLocale(locale.toString());
em.persist(selectedResource);
}

我读到,在自动创建表之后,我必须创建 Session 对象或 EntityManager,但在我的情况下不需要。我的 hibernate 依赖

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

有人有什么想法吗?

感谢帮助

最佳答案

这肯定是有问题的:

<property name="hibernate.hbm2ddl.auto" value="create-drop" />

您要求 Hibernate 在 session 结束时删除架构。这就是为什么你最终没有 table 。您可能想要的是:

<property name="hibernate.hbm2ddl.auto" value="create" />

此外,true 不是 hibernate.hbm2ddl.auto 的有效值,因此最好删除它:

<property name="hibernate.hbm2ddl.auto" value="true" />

这已经讨论过here .

关于java - 无法从实体类 Hibernate 4.2.7 Websphere 8.5.5 oracle 11g 创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31055990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com