SORU
26 ŞUBAT 2011, CUMARTESİ


Eşleme çok çok ekstra bir sütun ile birlikte tablo(lar)

Benim 3 veritabanı tabloları içerir: Kullanıcı ve Servis varlıklar aşağıdaki gibidir: çok-çok ilişkisi var ve SERVİCE_USER tablo ile katıldı

KULLANICILAR SERVİCE_USER HİZMETLERİ

SERVİCE_USER tablo ek ENGELLENMİŞ sütun içerir.

Böyle bir eşleme gerçekleştirmek için en iyi yolu nedir? Bu Varlık benim sınıflardır

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

private String userid;
private String email;

@Id
@Column(name = "USERID", unique = true, nullable = false,)
public String getUserid() {
return this.userid;
}

.... some get/set methods
}

@Entity
@Table(name = "SERVICES")
public class CmsService implements java.io.Serializable {
private String serviceCode;

@Id
@Column(name = "SERVICE_CODE", unique = true, nullable = false, length = 100)
public String getServiceCode() {
return this.serviceCode;
}
.... some additional fields and get/set methods
}

Bu örnek http://giannigar.wordpress.com/2009/09/04/m ... -jpa kullanarak takip ettim İşte bazı test kod:

User user = new User();
user.setEmail("e2");
user.setUserid("ui2");
user.setPassword("p2");

CmsService service= new CmsService("cd2","name2");

List<UserService> userServiceList = new ArrayList<UserService>();

UserService userService = new UserService();
userService.setService(service);
userService.setUser(user);
userService.setBlocked(true);
service.getUserServices().add(userService);

userDAO.save(user);

Bu sorun, hazırda bekleme Kullanıcı nesnesi devam ederse ve bir UserService. Bu CmsService ile hiçbir başarı nesne

İSTEKLİ getirme kullanmak ilerlemeye çalıştım

Eşleme yukarıda verilen bekliyorum davranışı elde etmek mümkün mü?

Belki de birçok ek sütun ile tablo birleştirmek için haritalama daha zarif bir yolu var mı?

CEVAP
26 ŞUBAT 2011, CUMARTESİ


Beri SERVİCE_USER tablo değil saf bir birleşim tablosu, ek fonksiyonel alanlar (bloke) gerekir haritası olarak bir varlık ve çürür, daha çok dernek arasında Kullanıcı ve Hizmete iki OneToMany dernekler : Bir Kullanıcı birçok UserServices, ve bir Hizmet var Birçok UserServices.

Yok(t bize en önemli parçası gösterilen : eşleme ve varlıklar arasındaki ilişkileri (sorunlar yaşıyorsanız kısmı yani) başlatma. Gibi görünmelidir nasıl size göstereceğim.

Eğer ilişki iki yönlü yaparsanız, böylece olmalıdır

class User {
    @OneToMany(mappedBy = "user")
    private Set<UserService> userServices = new HashSet<UserService>();
}

class UserService {
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToOne
    @JoinColumn(name = "service_code")
    private Service service;

    @Column(name = "blocked")
    private boolean blocked;
}

class Service {
    @OneToMany(mappedBy = "service")
    private Set<UserService> userServices = new HashSet<UserService>();
}

Eğer ilişkileri üzerinde herhangi bir çağlayan koymak istemiyorsanız eğer doğru değilse, o zaman tüm varlıkları Kaydet/devam etmelisiniz. İlişki (burada, UserService tarafı) sahibi olan yan başlatılması gerekir, ancak her iki taraf da uyum içinde olduğundan emin olmak için iyi bir uygulamadır.

User user = new User();
Service service = new Service();
UserService userService = new UserService();

user.addUserService(userService);
userService.setUser(user);

service.addUserService(userService);
userService.setService(service);

session.save(user);
session.save(service);
session.save(userService);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ColdfusTion

    ColdfusTion

    3 Aralık 2007
  • LiquidMusick

    LiquidMusick

    23 Aralık 2010
  • SuppressedStorm

    SuppressedSt

    11 AĞUSTOS 2013