【问题标题】:Fetch results from session.load using Hibernate使用 Hibernate 从 session.load 获取结果
【发布时间】:2016-07-10 06:40:46
【问题描述】:

我正在尝试通过在 Hibernate 中进行查询来获取结果集,例如

String id = "10";   
Person per = session.load(Person .class, id); // This is wrong, because it accepts only an integer, not a string. 

但是,我需要使用 session.load 通过传递一个字符串来获取结果,因为当我尝试获取时二级缓存没有触发

Criteria cr = session.createCriteria(Person.class);
cr.add(Restrictions.like("userId", id));
List<?> results = cr.list();

人物类

@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Entity
@Table(name = "person")
public class Person {
@Override
public String toString() {
    return "Personalisation [id=" + id + ", userId=" + userId
            + ", courseId=" + courseId + ", courseValue=" + courseValue
            + "]";
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String userId;
private String courseId;
private String courseValue;
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getUserId() {
    return userId;
}
public void setUserId(String userId) {
    this.userId = userId;
}
public String getCourseId() {
    return courseId;
}
public void setCourseId(String courseId) {
    this.courseId = courseId;
}
public String getCourseValue() {
    return courseValue;
}
public void setCourseValue(String courseValue) {
    this.courseValue = courseValue;
}

}

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC

"-//休眠/休眠配置 DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/intu</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- Ehcache config -->          
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property>

<!-- c3p0 Connection pool config -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>  
<property name="hibernate.c3p0.validate">true</property>

<property name="hibernate.c3p0.privilegeSpawnedThreads">true</property>
<property name="hibernate.c3p0.contextClassLoaderSource">library</property>



<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>

<mapping class="com.intu.Dashboard" />
<mapping class="com.intu.Employee"/>
<mapping class="com.intu.Person"/>

上面的代码可以正常工作,但不能通过二级缓存,每次命中数据库。

我需要执行哪些步骤才能完成?有没有其他办法

【问题讨论】:

  • 你能把Person类和hibernate配置文件贴出来吗?
  • @MadhusudanaReddySunnapu,使用人员类更新
  • 由于个人 id 是 int 类型,请尝试使用 int id = 10; 而不是 String id = "10"; .另外请发布休眠配置文件。
  • @MadhusudanaReddySunnapu,它只是一个字符串类型。我不能尝试使用 int,因为它甚至可能还有“s10”,字母数字。
  • @MadhusudanaReddySunnapu,使用休眠 cfg 文件更新

标签: java hibernate


【解决方案1】:

请在cr.add(Restrictions.like("userId", id))之后拨打cr.setCacheable(true)

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2014-10-26
    • 2020-05-10
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多