EntityManager persist() 메소드 사용에 문제가 있습니다. JSF2.0, glassfish 3, JPA 및 최대 절전 모드를 사용 중입니다. 스프링을 사용하지 않습니다.EntityManager의 persist() 메소드는 데이터베이스에 레코드를 삽입하지 않습니다. => SEVERE : javax.persistence.TransactionRequiredException
나는 방법과 이벤트 테이블에 이벤트를 추가하려고 계속하지만, EntityManager의이 방법은 데이터베이스에 레코드를 삽입하지 않음) (계속 그리고 난이 오류 메시지가 =>
SEVERE : javax.persistence.TransactionRequiredException com.sun.enterprise.container.common.impl.EntityManagerWrapper.doTxRequiredCheck (EntityManagerWrapper.java:163) at com.sun.enterprise.container.common.impl.EntityManagerWrapper.flush (EntityManagerWrapper.java:411) at dao .EvenementDao.addEvenement (EvenementDao.java:128).
@ManagedBean
@Stateless
public class EvenementDao implements Serializable{
/**
*
*/
private static final long serialVersionUID = -3343483942392617877L;
/**
*
*/
private List<TEvenement> listeEvenement;
private List<SelectItem> listeSelectItemEvnt;
private TEvenement tevenement ;
public EvenementDao() {
}
@PersistenceUnit(unitName="GA2010-ejbPU-dev")
private EntityManagerFactory emf;
@PostConstruct
private void init() {
tevenement = new TEvenement();
}
public List<TEvenement> getListeEvenement() {
EntityManager em = emf.createEntityManager();
TypedQuery<TEvenement> requete = m.createNamedQuery("TEvenement.findPrivateOther",
TEvenement.class);
listeEvenement = requete.getResultList();
return listeEvenement;
}
public TEvenement getEvenement() {
return tevenement;
}
public void setEvenement(TEvenement evenement) {
this.tevenement = evenement;
}
public void addEvenement(){
EntityManager em = emf.createEntityManager();
HttpSession session = (HttpSession) FacesContext.getCurrentInstance().
getExternalContext().getSession(false);
Integer codeUser = (Integer) session.getAttribute("codeUser");
tevenement.setUtilCreation(codeUser);
System.out.println("je rentre dans addevenemnt");
try{
System.out.println("i persist "+ em);
em.persist(tevenement);
em.flush();
System.out.println(tevenement.getDetailsEvenement());
FacesMessage message = new FacesMessage("Evenement ajouté avec succès.");
FacesContext.getCurrentInstance().addMessage(null, message);
}catch(Exception e){
e.printStackTrace();
}
}
} 그래서
이 작동하지 않습니다,하지만 progam는 fonction의 addEvenement, FacesMessage 메시지 = 새로운 FacesMessage에 입력 ("Evenement ajouté AVEC SUCCES."); 그것이 작동하고있는 것처럼 메시지를 나에게 돌려줍니다. 그게 내 entityMAnager에 의한 것이지만 사실 오터 함수는 똑같은 엔티티 관리자와 잘 작동하므로 이해가 안됩니다.
**public List<TEvenement> getListeEvenement()** {
EntityManager em = emf.createEntityManager();
TypedQuery<TEvenement> requete = em.createNamedQuery("TEvenement.findPrivateOther", TEvenement.class);
listeEvenement = requete.getResultList();
return listeEvenement;
}
이 하나가 잘 작동은 유일한 차이점은이 경우 조회가 선택이고 다른 경우에 그것은 그렇게 데이터베이스에 영향을 미칠 쿼리를 지속라는 것이다.
엔티티의 코드 :
@Entity @Table (이름 = "t_evenements") @NamedQueries ({NamedQuery (이름 = "TEvenement.findAll"@ 쿼리 = "TEvenement의 이벤트 녹화 FROM evnt (이벤트)를 선택 "), @NamedQuery (이름 ="TEvenement.findPrivateOther "쿼리 ="TEvenement의 이벤트 녹화 evnt.typeEvenement = 6 evnt.typeEvenement = 7 ")}) 공용 클래스 TEvenement가 구현 직렬화 {
private static final long serialVersionUID = -1908959833491896991L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="REF_EVENEMENT", unique=true, nullable=false)
private Integer refEvenement;
@Temporal(TemporalType.DATE)
@Column(name="DATE_DEBUT_EVENEMENT")
private Date dateDebutEvenement;
@Temporal(TemporalType.DATE)
@Column(name="DATE_FIN_EVENEMENT")
private Date dateFinEvenement;
@Column(name="DETAILS_EVENEMENT")
private String detailsEvenement;
@Column(name="IS_EVERYDAY")
private byte isEveryday;
@Column(name="RAPPEL_EVENEMENT")
private int rappelEvenement;
public Integer getUtilEvenement() {
return utilEvenement;
}
public void setUtilEvenement(Integer utilEvenement) {
this.utilEvenement = utilEvenement;
}
@Column(name="TITRE_EVENEMENT")
private String titreEvenement;
@Column(name="TYPE_EVENEMENT")
private String typeEvenement;
@Column(name="UTIL_COPIE_EVENEMENT")
private Integer utilCopieEvenement;
@Column(name="UTIL_EVENEMENT")
private Integer utilEvenement;
@Column(name="HEURE_EVENEMENT")
private String heureEvenement;
@Column(name="UTIL_CREATION")
private Integer utilCreation;
public String getHeureEvenement() {
return heureEvenement;
}
public void setHeureEvenement(String heureEvenement) {
this.heureEvenement = heureEvenement;
}
public TEvenement() {
}
public Integer getRefEvenement() {
return this.refEvenement;
}
public void setRefEvenement(int refEvenement) {
this.refEvenement = refEvenement;
}
public Date getDateDebutEvenement() {
return this.dateDebutEvenement;
}
public Integer getUtilCreation() {
return utilCreation;
}
public void setUtilCreation(Integer utilCreation) {
this.utilCreation = utilCreation;
}
public void setUtilCopieEvenement(Integer utilCopieEvenement) {
this.utilCopieEvenement = utilCopieEvenement;
}
public void setDateDebutEvenement(Date dateDebutEvenement) {
this.dateDebutEvenement = dateDebutEvenement;
}
public Date getDateFinEvenement() {
return this.dateFinEvenement;
}
public void setDateFinEvenement(Date dateFinEvenement) {
this.dateFinEvenement = dateFinEvenement;
}
public String getDetailsEvenement() {
return this.detailsEvenement;
}
public void setDetailsEvenement(String detailsEvenement) {
this.detailsEvenement = detailsEvenement;
}
public byte getIsEveryday() {
return this.isEveryday;
}
public void setIsEveryday(byte isEveryday) {
this.isEveryday = isEveryday;
}
public int getRappelEvenement() {
return this.rappelEvenement;
}
public void setRappelEvenement(int rappelEvenement) {
this.rappelEvenement = rappelEvenement;
}
public String getTitreEvenement() {
return this.titreEvenement;
}
public void setTitreEvenement(String titreEvenement) {
this.titreEvenement = titreEvenement;
}
public String getTypeEvenement() {
return this.typeEvenement;
}
public void setTypeEvenement(String typeEvenement) {
this.typeEvenement = typeEvenement;
}
public Integer getUtilCopieEvenement() {
return this.utilCopieEvenement;
}
public void setUtilCopieEvenement(int utilCopieEvenement) {
this.utilCopieEvenement = utilCopieEvenement;
}
로부터 evnt (이벤트)를 선택
}
아무에게도 내가 누락 된 아이디어가 있습니까?
서버에서 트랜잭션을 가져 오거나 시작하는 많은 예제가 있습니다. 빠른 예제는 빈에서 @TransactionAttribute (TransactionAttributeType.REQUIRED)를 사용하는 것입니다. 여기에 설명 된 다른 예제가 있습니다. http://en.wikibooks.org/wiki/Java_Persistence/Transactions – Chris
@TransactionAttribute (TransactionAttributeType.REQUIRED) => this 어쩌면 작동하지 않습니다. 왜냐하면 저는 클래스를 삽입하려고했기 때문에 인터페이스를 읽지는 않았지만 이것을 읽었습니다. 그러나 이것이 최신인지는 모르겠습니다. http://www.adam-bien.com/roller/abien/entry/no_xml_dependency_injection_jpa. 기사에서 : "일반적인 오류 : 당신은 EJB 3.0에서 클래스를 삽입 할 수 없지만 인터페이스 만이 EJB 3.1에서 변경됩니다 ..."여전히 사실입니까? – user2198685