【发布时间】:2018-04-28 01:11:54
【问题描述】:
据我了解(例如,来自 here),如果我为我的实体指定架构,那么它应该在创建查询时使用该架构名称。
所以,如果我有一个实体:
@Entity
@Table(name="proposalstatuses",schema="sales")
public class ProposalStatus implements Serializable {
private static final long serialVersionUID = 1L;
private int proposalStatusID;
private String proposalStatusName;
public ProposalStatus() {}
public ProposalStatus(String proposalStatusName) {
this.proposalStatusName = proposalStatusName;
}
@Id
@Column(name="pk_proposalstatusid")
@GeneratedValue(strategy = GenerationType.AUTO)
public int getProposalStatusID() {
return proposalStatusID;
}
public void setProposalStatusID(int proposalStatusID) {
this.proposalStatusID = proposalStatusID;
}
@Column(name="proposalstatusname", unique=true, nullable=false)
public String getProposalStatusName() {
return proposalStatusName;
}
public void setProposalStatusName(String proposalStatusName) {
this.proposalStatusName = proposalStatusName;
}
}
那么我希望 Hibernate 生成它的查询,例如 select ... from sales.proposalstatuses。但是,我看到的是:
select proposalst0_.pk_proposalstatusid as pk_propo1_8_, proposalst0_.proposalstatusname as proposal2_8_
from proposalstatuses proposalst0_
order by proposalst0_.proposalstatusname asc
对于这种情况,这不是什么大不了的事,但现在我希望能够对不同模式中的表使用连接,但这是失败的,因为它认为表不存在(而且它们不存在)在默认架构中)。
所以,我有一个具有多个架构的数据库(一个连接)。如何让 Hibernate 在引用表时使用模式名称?看起来应该很简单,但我一定遗漏了一些东西。
谢谢!
我正在使用 Spring Boot 1.5.7,它使用 Hibernate JPA 2.1 和 Hibernate Core 5.0.12。 如果我使用 H2 数据源,这确实有效。如果 MySQL 是数据源,我只会看到问题。
我已阅读有关在我要引用的表的默认架构中创建视图的信息。但是,这不是一个可行的选择,因为我必须创建很多视图;看起来 Hibernate 应该能够轻松处理这个问题。
以下是 application.properties 中的配置设置:
spring.datasource.url=jdbc:mysql://localhost/sales?verifyServerCertificate=false&useSSL=true
spring.datasource.username=user
spring.datasource.password=pass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
spring.jpa.show-sql=true
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
更改 url 中架构的名称允许我访问该架构中的数据,但除了 url 中列出的架构之外,我无法访问任何其他架构。
【问题讨论】:
标签: hibernate jpa spring-boot