2016-04-14 10 views
0

Ich habe eine Tabelle (USERS) mit Säulen:Hibernate SaveOrUpdate auf zusammengesetzten Schlüssel

  1. TABLE_ID - Integer
  2. BENUTZER_ID - Integer
  3. DATE - Datetime
  4. VALUE - Doppel

Diese wird auf eine User Klasse abgebildet:

@Table(name = "USERS") 
@Entity 
public class User implements Serializable { 

private static final long serialVersionUID = -6894800373034942671L; 

@Transient 
private String userName; 

@Id 
@Column(name = "TABLE_ID") 
private Integer tableId;  

@Column(name = "USER_ID") 
private Integer userId; 

@Column(name = "VALUE") 
private Double value; 

@Column(name = "DATE") 
private Date date; 

public User() { 

} 
// Getters and setters here 

}

Tabelle Constraints sind anstelle mit Indizes:

  1. TABLE_ID - einzigartig und gruppierten
  2. BENUTZER_ID, DATE - einzigartig und nicht
  3. gruppierten

I Liste erstellen wird von User Objekte jeweils mit einer anderen userId. Wenn für einen bestimmten date ein Benutzerdatensatz mit userId in der Tabelle vorhanden ist, möchte ich seinen value aktualisieren, andernfalls fügen Sie das neue User Objekt ein.

Muss ich mit HQL auswählen, neue User Objekte für die fehlenden Objekte erstellen und dann saveOrUpdate ausführen? Oder gibt es einen besseren Weg?

Wie kann ich das oben genannte mit Hibernate erreichen?

Antwort

0

SaveOrUpdate Methode wird gut tun .. aber vergessen Sie nicht, wenn Sie einen Datensatz aktualisieren möchten, müssen Sie es aus der Datenbank zuerst für Ex holen müssen:

//in your Dao Class 
... 
public void save(User user){ 

    Transaction tx = null; 
    Session session = SessionFactoryUtil.getInstance().getCurrentSession(); 
    try { 
     tx = session.beginTransaction(); 
     session.saveOrUpdate(user); 
     tx.commit; 
    }catch(Exception e){ 
     tx.rollBack(); 
    } 
} 

public User getUserById(int user_id){ 
    User user=(User) session.get(User.class, user_id); 
    return user; 
} 

//creating new User 
User user1=new User(); 
user1.setName("Mohamed"); 
yourDao.save(user1); 


//updating an existing User 
User user2=yourDao.getUserById(19); 
user2.setCountry("Morocco"); 
yourDao.save(user2);