PDA

View Full Version : سوال: lookup با jdbc Resources و spring



abtin021
دوشنبه 08 اردیبهشت 1393, 22:42 عصر
سلام من یک پروژه با JPA , Spring ,JSF دارم می نویسم

یک resource رو که تعریف کردم در application server به اسم jdbc/myTest و بعد اومدم در فایل persistenc.xml که برای JPA هست اینم کدش


<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="jndiSpringPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/myTest</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>



در قسمت بعد اومد یک entity تعریف کردم که مطابق database هستش


package entity;




import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


/**
*
* @author Administrator
*/
@Entity
@Table(name="student")
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
private String name;
private String level;


public Long getId() {
return id;
}


public void setId(Long id) {
this.id = id;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getLevel() {
return level;
}


public void setLevel(String level) {
this.level = level;
}
}




در این قسمت یک کلاس نوشتم که قراره بیاد lookup کنه اون resource رو که در application server تعریف شده و بعدش EntityManagerFactory رو برام پر کنه تا transaction بگیرم و به دیتابیس وصل بشم چطور میشه این رو پیاده سازی کرد بدون EJB من در EJB بالای EntityManagerFactory از انوتیشن @PersistenceUnit استفاده می کردم اما حالا اگه بخوام با Spring یا هر فریم ورک دیگه ای که EJB نباشه این رو پیاده سازی کنم چیکار باید انجام بدم؟؟


package model;


import java.util.Collection;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;
import entity.Student;


public class ProductDaoImpl{

private EntityManagerFactory emf;

@PersistenceUnit
public void setEmf(EntityManagerFactory emf) {
this.emf = emf;
}
public Collection loadProductsByCategory() {
EntityManager em = this.emf.createEntityManager();
try {
Query query = em.createQuery("from Student as p where p.ID = 11");
return query.getResultList();
}
finally {
if (em != null) {
em.close();
}
}
}

}

cups_of_java
سه شنبه 09 اردیبهشت 1393, 10:55 صبح
Use @PersistentContext

Look this (http://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch14s06.html) & this (http://stackoverflow.com/questions/17743875/spring-jpa-hibernate-tomcat-unable-to-find-persistence-unit-when-loading-spr)

and a complete tutorial (http://www.petrikainulainen.net/spring-data-jpa-tutorial/)