2016-04-08 28 views
0

Model katmanı için JPA ve EJB kullanarak bir java EE (web) uygulaması oluşturuyorum. Sanırım CRUD için Oturum Beans'ı kullanmalıyım.".merge (varlık)" nasıl çalışır?

bu benim BrandFacade.java (oturum fasulye)

package model.business; 

import model.localinterface.BrandFacadeLocal; 
import javax.ejb.Stateless; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import model.entities.Brand; 

@Stateless 
public class BrandFacade extends AbstractFacade<Brand> implements BrandFacadeLocal, BrandFacadeRemote { 

    @PersistenceContext(unitName = "MyWheelEE-ejbPU") 
    private EntityManager em; 

    @Override 
    protected EntityManager getEntityManager() { 
     return em; 
    } 

    public BrandFacade() { 
     super(Brand.class); 
    } 


    @Override 
    public boolean CreateBrand(String name) { 
     Brand brand=new Brand(0, name); 
     boolean result=true; 
     try { 
      em.persist(brand); 
     } catch (Exception e) { 
      result=false; 
     } 
     em.close(); 
     return result; 
    } 

    @Override 
    public void deleteBrand(int brandOid) { 
     em.remove(getBrandByOid(brandOid)); 
     em.flush(); 
    } 

    @Override 
    public Brand getBrandByOid(int brandOid) { 
     em.flush(); 
     return em.find(Brand.class, brandOid); 
    } 

    @Override 
    public void editBrand(Brand brand) { 
     em.merge(brand); 
     em.flush(); 
    } 


} 

ve bu ı .merge yöntem çalışır bilmek isteyen benim Brand.java sınıf (varlık)

package model.entities; 

import java.io.Serializable; 
import java.util.List; 
import javax.persistence.Basic; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlTransient; 

@Entity 
@Table(name = "brand") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "Brand.findAll", query = "SELECT b FROM Brand b"), 
    @NamedQuery(name = "Brand.findByOid", query = "SELECT b FROM Brand b WHERE b.oid = :oid"), 
    @NamedQuery(name = "Brand.findByName", query = "SELECT b FROM Brand b WHERE b.name = :name")}) 
public class Brand implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "oid") 
    private Integer oid; 
    @Basic(optional = false) 
    @Column(name = "name") 
    private String name; 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "brandOid") 
    private List<Wheelchair> wheelchairList; 

    public Brand() { 
    } 

    public Brand(Integer oid) { 
     this.oid = oid; 
    } 

    public Brand(Integer oid, String name) { 
     this.oid = oid; 
     this.name = name; 
    } 

    public Integer getOid() { 
     return oid; 
    } 

    public void setOid(Integer oid) { 
     this.oid = oid; 
    } 

    public String getName() { 
     return name; 
    } 

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

    @XmlTransient 
    public List<Wheelchair> getWheelchairList() { 
     return wheelchairList; 
    } 

    public void setWheelchairList(List<Wheelchair> wheelchairList) { 
     this.wheelchairList = wheelchairList; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (oid != null ? oid.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Brand)) { 
      return false; 
     } 
     Brand other = (Brand) object; 
     if ((this.oid == null && other.oid != null) || (this.oid != null && !this.oid.equals(other.oid))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "model.entities.Brand[ oid=" + oid + " ]"; 
    } 

} 

olduğunu. .. bence DB'de varlığın birincil anahtarına sahip olan varlıkları araştırıyor ve daha sonra düzenlenmiş alanlarda çalışıyor mu?

Ancak, yalnızca adını bilen bir markayı nasıl düzenleyebilirim? Eğer yöntemini birleştirme çağırdığınızda alan birincil anahtar olarak işaretlenmiş ise

Ben .merge yöntem çalışır bilmek isteyen

... , JPA (doğrular:

+0

'u çalıştırın. Sorularınızı gerçekten birbirinden ayırmalısınız. –

cevap

1

Burada, gerçekten cevaplar oldukça basit @Id) null değil: - Evet EVET: JPA veritabanınızda yeni bir kayıt oluşturacak - IT NOT: JPA, kayıt alan adı gibi bir şey (UPDATE tablo_adı ..... WHERE id = ?) Yani, haklısın :)

ama nasıl bir marka düzenleyebilirim? İsim neyse? 1. Yaz JPQL gibi bir şey:

UPDATE Person p SET p.lastName = 'New Last Name' WHERE p.name = 'his name' 
  1. Bir Doğalöğesini yaz istediğin düzenleme Kimliği alanına yerine başka bir alana bilerek rekor ise , 2 seçeneğiniz olacak Sorgu, bu durumda, DÜZ SQL ve koşmak her iki durumda da

yapmanız gerekecektir yazacak bir şey gibi:

Query query = em.createQuery or em.createNativeQuery 

ve sonra sadece

+0

çok! Bu yüzden isim PRIMARY KEY ismini almak için bir yöntem yapmak yararlı olduğunu düşünüyorum. Tabi eşsiz bir alan olmalı. işlem ne olacak? – Marco