【问题标题】:Hibernate Default Schema not working休眠默认架构不起作用
【发布时间】:2014-07-20 02:00:49
【问题描述】:

我正在尝试在我的 Hibernate 映射中设置默认架构,如下所示:

<persistence-unit name="store">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jar-file>store-data-0.0.4-SNAPSHOT.jar</jar-file>

    <properties>
        <property
            name="hibernate.show_sql"
            value="true" />
        <property
            name="hibernate.format_sql"
            value="true" />
        <property
            name="hibernate.default_schema"
            value="Store"></property>
        <property
            name="hibernate.archive.autodetection"
            value="class" />
    </properties>
</persistence-unit>

但是,当我运行一个简单的测试查询时:

@PersistenceContext
private EntityManager manager;

@Transactional
public List<Person> listPeople() {
    return manager.createQuery("SELECT p FROM Person p", Person.class).getResultList();
}

我明白了:

对象名称“Person”无效。

当我运行原生查询时:

manager.createNativeQuery("SELECT * FROM Store.Person", Person.class).getResultList();

一切正常。

我正在使用 Spring 运行 SE 应用程序。我之前在 Web App 中使用过hibernate.default_schema,效果很好。

这是我声明实体映射的方式:

<bean
    id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property
        name="dataSource"
        ref="mysqlDataSource" />
    <property
        name="packagesToScan"
        value="com.base.package" /> <!-- base package for all my entities -->
    <property name="jpaVendorAdapter">
        <bean
            class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
</bean>

有什么想法吗?

【问题讨论】:

  • 如何以及在何处声明类实体Person 的映射?
  • 我已经编辑了我的问题以包含实体映射。另外,我认为值得一提的是,如果我在基本 (dbo) 模式中创建表,一切正常。
  • 默认模式是否可能应该是 "dbo.Store" 而不是 "Store" ?或“商店”模式的其他一些明确的所有者?请注意,“dbo”是模式所有者,而不是模式。见sqlteam.com/article/…

标签: java spring hibernate


【解决方案1】:

我可以通过直接在我的 Spring 上下文文件中设置默认模式来解决这个问题:

<bean
    id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property
        name="dataSource"
        ref="mysqlDataSource" />
    <property
        name="packagesToScan"
        value="com.base.package" /> <!-- base package for all my entities -->
    <property name="jpaVendorAdapter">
        <bean
            class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.default_schema">Store</prop>
            </props>
        </property>
</bean>

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 2013-07-26
    • 2023-03-13
    • 2013-12-19
    • 2019-05-04
    • 2015-10-28
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多