Dạ em đang học Hibernate đến phần cache L2 em đã làm theo các bước trên mạng, nhưng session2 của em mãi vẫn truy cập vào database thay vì lấy trong ram như trên mạng và trước đó em đã load Users từ session1. Mọi người có thể giúp em được không ạ em xin cảm ơn anh chị !!
Hibernate enable cached L2
Bạn ơi, chụp ảnh vậy trông khó coi quá. Qua đọc cách sử dụng markdown rồi đưa code lên nha.
Link Cách post Code dùng Markdown trong Category Programming
Hàm main của em
public static void main(String[] args) {
SessionFactory sessionFactory = getSessionFactory();
/***************************First Session Begins**********************************/
Session session = sessionFactory.openSession();
session.beginTransaction();
Users user=session.load(Users.class, 1);
System.out.println(user);
session.getTransaction().commit();
session.close();
/***************************Second Session Ends**********************************/
Session session2 = sessionFactory.openSession();
session2.beginTransaction();
System.out.println(session2.load(Users.class, 1));
session2.getTransaction().commit();
session2.close();
sessionFactory.close();
}
File hibernate.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:jtds:sqlserver://localhost:1433/Libary</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password">sa</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">false</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="net.sf.ehcache.configurationResourceName">ehcache.xml</property>
<mapping resource="com/mycompany/mavenlearning/Users.hbm.xml"/>
</session-factory>
</hibernate-configuration>
pom.xml
<dependencies>
<!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
<dependency>
<groupId>org.jboss.logging</groupId>
<artifactId>jboss-logging</artifactId>
<version>3.3.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.0.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.sourceforge.jtds/jtds -->
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.0.0.Final</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.11</version>
</dependency>
</dependencies>
Users.java
*/
@Entity
@Table(name="users"
,schema="dbo"
,catalog="Libary"
)
@Cacheable(true)
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Users implements java.io.Serializable {
private static final long serialVersionUID = -9035342833723545079L;
private int id;
private String pass;
private String hoTen;
private String gioiTinh;
public Users() {
}
public Users(int id) {
this.id = id;
}
public Users(int id, String pass, String hoTen, String gioiTinh) {
this.id = id;
this.pass = pass;
this.hoTen = hoTen;
this.gioiTinh = gioiTinh;
}
@Id
@Column(name="id", unique=true, nullable=false, length=50)
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="pass", length=30)
public String getPass() {
return this.pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Column(name="HoTen", length=100)
public String getHoTen() {
return this.hoTen;
}
public void setHoTen(String hoTen) {
this.hoTen = hoTen;
}
@Column(name="gioiTinh", length=20)
public String getGioiTinh() {
return this.gioiTinh;
}
public void setGioiTinh(String gioiTinh) {
this.gioiTinh = gioiTinh;
}
@Override
public String toString() {
return "Users{" + "id=" + id + ", pass=" + pass + ", hoTen=" + hoTen + ", gioiTinh=" + gioiTinh + '}';
}
}
dạ anh ơi em xin cảm ơn lời khuyên của anh em đã làm như yêu cầu của anh, em xin lỗi vì sự sai sót của em tại kinh nghiệm em còn ít. em đã thêm code ở dòng trên anh giúp em xem với ạ em xin cảm ơn. Dạ nếu code em khó đọc nữa thì anh click vào ảnh để phóng to xem giúp em nhé heh <3 !!
1 Like
Mình cũng chỉ kêu bạn format code cho nó chuẩn thôi chứ, cũng chưa đả động gì đến java. .
Cơ mà cũng không phải lo, tẹo khác có cao nhân vào giúp bạn.