我正在将 Hibernate 项目转换为 Spring Hibernate 项目。由于我将 Hibernate 与 Spring 集成,因此我在 @Configuration 中定义所有 session 工厂、数据源定义。部署后,当我启动服务器时,出现以下异常
Unable to find column with logical name: TEST_CODE in org.hibernate.mapping.Table(TEST_MONTHS) and its related supertables and secondary tables.
实体类:
@javax.persistence.Entity
@Table(name="TEST_MONTHS")
public class ConnectionMonth implements Serializable {
/**
* @generated
*/
private static final long serialVersionUID = -940496855L;
@Id
@Column(name = "TEST_CODE")
private String testCode;
@Id
@Column(name = "CONMONTH")
private String contractMonth;
@Column(name = "TYPE")
private String type;
@Column(name = "STARTDATE")
private Date startDate;
@Column(name = "ENDDATE")
private Date endDate;
public String gettestCode() {
return testCode;
}
public void settestCode(String testCode) {
this.testCode = testCode;
}
public String getContractMonth() {
return contractMonth;
}
public void setContractMonth(String contractMonth) {
this.contractMonth = contractMonth;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
/**
* @generated
*/
@Override
public String toString() {
return "ContractMonth: " + contractMonth + " Type: " + type
+ " StartDate: " + startDate + " EndDate: " + endDate;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((testCode == null) ? 0 : testCode.hashCode());
result = prime * result
+ ((contractMonth == null) ? 0 : contractMonth.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ContractMonth other = (ContractMonth) obj;
if (testCode == null) {
if (other.testCode != null)
return false;
} else if (!testCode.equals(other.testCode))
return false;
if (contractMonth == null) {
if (other.contractMonth != null)
return false;
} else if (!contractMonth.equals(other.contractMonth))
return false;
return true;
}
}
持久化配置:
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence.properties" })
@ComponentScan({ "com.test.commons.domain.*" })
public class PersistenceConfiguration {
@Autowired
private Environment env;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(restDataSource());
sessionFactory.setPackagesToScan(new String[] {
"com.test.commons.domain.employee"});
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource restDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("jdbc.url"));
dataSource.setUsername(env.getProperty("jdbc.user"));
dataSource.setPassword(env.getProperty("jdbc.pass"));
return dataSource;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(
SessionFactory sessionFactory) {
HibernateTransactionManager txManager = new HibernateTransactionManager();
txManager.setSessionFactory(sessionFactory);
return txManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
Properties hibernateProperties() {
return new Properties() {
{
setProperty("hibernate.hbm2ddl.auto",
env.getProperty("hibernate.hbm2ddl.auto"));
setProperty("hibernate.dialect",
env.getProperty("hibernate.dialect"));
setProperty("hibernate.globally_quoted_identifiers", "true");
}
};
}
}
持久性.属性:
# jdbc.X
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=/*DB url*/
jdbc.user=pwd
jdbc.pass=pwd
# hibernate.X
hibernate.dialect=org.hibernate.dialect.OracleDialect
hibernate.show_sql=false
hibernate.hbm2ddl.auto=create-drop
最佳答案
你能检查一下sql中的表详细信息吗,它是否有“”引号或单引号
因为我在代码中也遇到了同样的问题,因为我的表格详细信息如下
CREATE TABLE `orders` (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`firstname` VARCHAR(50) NOT NULL,
);
我正在使用下面的 bean 访问它
@Entity
@Table(name="orders")
public class Order {
@Id
@GeneratedValue
@Column(name="id")
private int id;
@Column(name="firstname")
private String firstName;
@OneToMany(targetEntity=OrderLine.class,
cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
@JoinTable(
name="orderlines",
joinColumns = {@JoinColumn(table = "orderlines", name="FK_orders_orders",
referencedColumnName = "order_id")},
inverseJoinColumns={@JoinColumn(table = "orders", name="FK_orders_orders",
referencedColumnName = "id")}
)
删除单引号后,它开始为我工作
关于java - org.hibernate.MappingException : Unable to find column with logical name in Spring Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37295787/