Je pourrais travailler avec la stratégie suivante.
Cette stratégie fonctionne très bien quand vous ne voulez pas récupérer la collection entière, ou chercher avec quelques critères d'addition, vous pouvez la récupérer (relation de collection) avec la requête nommée. utilise DAO séparé pour l'opération CRUD sur la table JOIN de plusieurs à plusieurs relation par exemple. L'utilisateur peut avoir de nombreux comptes et le compte peut être partagé par de nombreux utilisateurs. créer des modèles de domaine/DAO pour les trois tables, utiliser la cartographie de la relation pour la récupération et pour DDL utiliser les propriétés individuelles.
@Entity
@Table(name="account")
public class Account {
@Id (name="accountid")
private Long accountId;
@Column
private String type;
// removed @OneToMany as it causes issue while serializing to xml
@Transient
private Collection accountUsers;
//rest of the properties n geter setter goes here
}
@Entity
@Table(name="user")
public class User {
@Id(name="userid")
private Long userId;
@Column
private String name;
// by making transient jpa/hibernate does not initialize it with proxy.. so it remains null
/* you can populate this property using named query whenever required .*/
@Transient
private Collection userAccounts;
// rest of the properties n getter setter goes here
}
@Entity
@Table(name="AccountUser")
public class AccountUser {
// whatever your strategy to implement primary key here ,
@Id (name="accountuserid")
private Long accountUserId;
/* please note this annotation , made insertable/updatable false , relation defined just for fetching relation
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "accountid", referencedColumnName = "accountid", insertable = false, updatable = false)
private Account account;
// look at insertable/updatable properties its turned off
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "userid", referencedColumnName = "userid", insertable = false, updatable = false)
private User user;
//
@Column (name = "userid" )
private Long userId;
@Column (name = "accountid" )
private Long accountId;
@Column (name="opendate")
private Date opendate;
}
/* use separate dao to save above beans */
// somthing like this
public class AccountDAOImpl extends GenericDAOImpl implements AccountDAO {
}
public class UserDAOImpl extends GenericDAOImpl implements UserDAO {
}
public class AccountUserDAOImpl extends GenericDAOImpl implements AccountUserDAO {
}
J'ai essayé d'expliquer si besoin de clarification de bien vouloir revenir en arrière. merci
Il semble approprié de déplacer des mappages vers XML si vous souhaitez réutiliser le code source. –
Peut-être avec http://stackoverflow.com/questions/7086433/jpa-best-practices/15656296 – java4africa