我在配置类中使用spring boot和hibernate。未映射我的实体。请参阅下面的错误。在看了其他一些关于这个的stackoverflow页面后,我仍然无法理解。
我相信以下是正确的:HQL、@实体、@表
错误。
org.hibernate.hql.internal.ast.QuerySyntaxException: Message is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:169) ~[hibernate-core-5.4.2.Final.jar:5.4.2.Final]
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91) ~[hibernate-core-5.4.2.Final.jar:5.4.2.Final]
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:79) ~[hibernate-core-5.4.2.Final.jar:5.4.2.Final]
实体。
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity(name = "strunk.entities")
@Table(name = "Message")
public class Message {
code...
}
DAO类
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import strunk.entities.Message;
@Repository
public class MessageRepoImpl implements MessageRepo {
@Autowired
private SessionFactory sf;
@Override
public List<Message> getMessages() {
Session sess = sf.openSession();
List<Message> messages = null;
try {
messages = sess.createQuery("FROM Message").list();
} catch (HibernateException e) {
e.printStackTrace();
} finally {
sess.close();
}
return messages;
}
more code...
}
当我将getMessages方法主体替换为以下内容时,它会起作用
Session sess = sf.openSession();
List<Message> messages = sess.createNativeQuery(
"SELECT * FROM Message" )
.list();
return messages;
数据库表名称为“消息”。
SpringBoot类
@SpringBootApplication(exclude= HibernateJpaAutoConfiguration.class)
@ComponentScan("strunk")
@EnableJpaRepositories("strunk")
@EntityScan("strunk")
public class InstantMessengeTranslatorApplication {
public static void main(String[] args) {
SpringApplication.run(InstantMessengeTranslatorApplication.class, args);
}
}
Hibernate配置类
package strunk.config;
import java.io.FileInputStream;
import java.util.Properties;
import javax.sql.DataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@PropertySource(value = {"classpath:application.properties"})
public class HibernateConfig {
@Value("${spring.datasource.driver-class-name}")
private String driverClass;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${hibernate.dialect}")
private String dialect;
@Bean
public DataSource getDatasource(){
DriverManagerDataSource datasource = new DriverManagerDataSource(url, username, password);
datasource.setDriverClassName(driverClass);
return datasource;
}
private Properties hibernateProperties() {
Properties properties = new Properties();
properties.put("hibernate.dialect", dialect);
properties.put("hibernate.hbm2ddl.auto", "update");
properties.put("hibernate.show_sql", "true");
properties.put("hibernate.format_sql", "true");
return properties;
}
@Bean
public LocalSessionFactoryBean sessionFactory(){
LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
factory.setDataSource(getDatasource());
factory.setHibernateProperties(hibernateProperties());
factory.setPackagesToScan(new String[] {"com.xadmin.springboothibernate.model"});
return factory;
}
@Bean
@Autowired
public HibernateTransactionManager transactionManager(SessionFactory factory)
{
HibernateTransactionManager transactionManger = new HibernateTransactionManager();
transactionManger.setSessionFactory(factory);
return transactionManger;
}
}
我错过了什么?
问题是,在Hibernate config类中,setPackagesToScan()引用的包不正确。谢谢你,亚历克斯。
在Springbean初始化期间,使您的实体类处于初始化状态。如果它没有在组件扫描中添加,那么它将不会被视为bean类,并且Hibernate将通过错误。
我被要求为基于hibernate的数据访问对象编写一些代码测试。 我想我会从一个简单的测试开始:当我保存一个模型时,它应该在返回的集合中。问题是,无论如何,当我调用时,它总是一个空集合。 应用程序代码已经在生产中工作,所以让我们假设问题只是出在我的测试代码上。 预期测试输出为: 到目前为止,我已经尝试在插入后显式提交,并禁用缓存,但这并不奏效。 我不想成为冬眠大师,也没有足够的时间阅读整个留档。在
我需要在我现有的Spring Boot 1.2.5应用程序中编写一些临时代码来执行一些复杂的SQL查询。所谓复杂,我指的是关于4个不同表的单个查询,我有很多这样的表。我们都决定使用现有的SQL来降低新查询出错的潜在风险,在这种情况下,这是一个很好的方法。 我的应用程序使用JPA / Hibernate并将一些实体映射到表。从我的研究来看,似乎我必须做很多实体映射。 我尝试编写一个类,该类只获取Hi
我不确定该如何表述这个问题,但我目前面临的问题是,为什么我的LoginActivity在启动时没有显示。下面是我的代码 因此,为了让您想要的activity首先显示,您必须替换您想要的右侧上方的那个?但替换后,不知何故我的loginActivity并不是显示的第一个屏幕。我尝试将忘记帐户和signupActivity替换为启动时显示的第一个屏幕,并且两者都按预期显示。然而,对于我的LoginAct
在Hibernate继承映射中,JPA每类表策略, 根实体不需要表来映射, 子实体做,每个子实体都有一个表。 在我的理解中,实体是:带有映射配置的java类,它应该映射到一个表, 那么,如果没有要映射的表,根实体如何作为实体存在呢? 如果它不需要一个表来映射,我们为什么不用一个@mappedSuperclass呢? 我们可以使用此根实体进行查询吗?
我正在尝试用Spring 3、JPA 2和Hibernate 3制作一个应用程序。我有一个问题,当你坚持一个实体:什么都没发生!数据不插入数据库,也不执行查询。但是,当我使用一个请求,如query.getResultList()选择正常工作。 所以我认为我的问题只是在坚持/更新和事务管理器上,但我不太擅长Spring。你能帮帮我吗? 下面是我的配置文件: 谁能帮帮我吗?
我正在做一个装在盒子里的计数器。我试图使这个计数器对不同的屏幕大小做出响应,但由于某些原因,我试图使用的媒体查询将无法工作。 我曾尝试将设备宽度更改为768px以下,但查询对计数器没有影响,我不确定原因。我已经包括了计数器的HTML/PHP代码以及CSS。有人知道为什么它不起作用吗 我已确保此标签包含在文档的标题中。 超文本标记语言: CSS: