【发布时间】: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/…