我是Hibernate和ms sql服务器的新手。Hibernate Ms Sql Server,关键字'public'附近语法不正确
我有错误是这样的:
Log: DEBUG SQL:109 - select opmtnasaba0_.id_opmt_nasabah as id_opmt_1_48_0_, opmtnasaba0_.alamat as alamat2_48_0_, opmtnasaba0_.flag_transfer as flag_tra3_48_0_, opmtnasaba0_.id_opdd_kategori_nasabah as id_opdd_4_48_0_, opmtnasaba0_.jabatan as jabatan5_48_0_, opmtnasaba0_.keterangan as keterang6_48_0_, opmtnasaba0_.ktp_npwp as ktp_npwp7_48_0_, opmtnasaba0_.nama as nama8_48_0_, opmtnasaba0_.id_opmt_instansi as id_opmt13_48_0_, opmtnasaba0_.penanggung_jawab as penanggu9_48_0_, opmtnasaba0_.tgl_lahir as tgl_lah10_48_0_, opmtnasaba0_.tgl_status as tgl_sta11_48_0_, opmtnasaba0_.usia as usia12_48_0_ from public.opmt_nasabah opmtnasaba0_ where opmtnasaba0_.id_opmt_nasabah=?
Error: com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'public'
。
我jdbc.properties
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.dialect=org.hibernate.dialect.SQLServer2008Dialect
jdbc.databaseurl=jdbc:sqlserver://localhost\\mssql;databaseName=databaseName
jdbc.username=username
jdbc.password=password
我的配置
@Configuration
@ComponentScan("com.blah")
@EnableTransactionManagement
@PropertySource({"classpath:/jdbc.properties"})
public class ApplicationContextConfig implements TransactionManagementConfigurer {
@Autowired
Environment env;
@Override
@Bean
public PlatformTransactionManager annotationDrivenTransactionManager() {
// TODO Auto-generated method stub
return txManager();
}
@Bean(name = "dataSource")
public DataSource getDataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
dataSource.setUrl(env.getProperty("jdbc.databaseurl"));
dataSource.setUsername(env.getProperty("jdbc.username"));
dataSource.setPassword(env.getProperty("jdbc.password"));
return dataSource;
}
private Properties getHibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.dialect", env.getProperty("jdbc.dialect"));
properties.put("hibernate.current_session_context_class",
"com.jamkrindo.SyncSuretyBondCabang.config.TransactionAwareSessionContext");
// properties.put("hibernate.hbm2ddl.auto", "create-drop");
return properties;
}
@Autowired
@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory(DataSource dataSource) {
LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
sessionBuilder.addProperties(getHibernateProperties());
sessionBuilder.scanPackages("com.jamkrindo");
return sessionBuilder.buildSessionFactory();
}
@Autowired
@Bean(name = "transactionManager")
public HibernateTransactionManager getTransactionManager(
SessionFactory sessionFactory) {
HibernateTransactionManager transactionManager = new HibernateTransactionManager(
sessionFactory);
//transactionManager.setRollbackOnCommitFailure(true);
return transactionManager;
}
@Bean
public PlatformTransactionManager txManager() {
return new DataSourceTransactionManager(getDataSource());
}
}
我的服务
OpmtNasabah dmn = (OpmtNasabah) dao.get(OpmtNasabah.class, json.getIdOpmtNasabah());
吾道
public Object get(Class clazz, Number id) {
// TODO Auto-generated method stub
return sessionFactory.getCurrentSession().get(clazz, id);
}
我的假设是因为hibernate在table_name之前使用关键字public。
如何解决这个问题?
谢谢。
请粘贴您的代码。 –
请参阅http://stackoverflow.com/questions/14932136/make-hibernate-backquote-all-table-column-names - 这应该解决问题 – user2864740
我解决了问题,在我的域模型中,注释表@Table(名称=“opmt_nasabah”,架构=“公共”),我只是删除架构=“公共”。 –