1 pièce(s) jointe(s)
opérations CRUD sur plusieurs entity
Bonjour je développe une application avec JSF et JPA(Netbean6.5.1 et glasfishv2 et PostgreSQL 8.4.1 comme serveur de base de données). Je joins une partie de la db. Un customer peut être lié à plusieurs listes et inversement. un Customer peut être propriétaire ou bénéficiaire d'une liste.(désolais pour ce franglais:zoubi:).
Je fais une recherche des listes et j'aimerai afficher les champs suivants: Nom et Prénom de l'entity Customer, le type de l'entity Type, la date de événement et le statut de l'entity ListCadeaux. J'arrive à afficher tous les champs sauf ceux du Customer. Ca doit paraitre simple mais, mais je tourne en rond. :calim2:
Quelqu'un a t-il une piste merci d'avance.
voici les entity
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
@Entity
@Table(name = "t_customer")
public class Customer implements Comparable, Serializable {//Comparable,
//===========================
//= attributs =
//===========================
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long cust_id;
@Column(name = "cust_first_name")
private String first_name;
@Column(name = "cust_last_name")
private String last_name;
@Column(name = "cust_email")
private String email;
@Column(name = "cust_pswd")
private String password;
//...
@ManyToMany(mappedBy = "customers", cascade = CascadeType.PERSIST)
@JoinTable(name = "t_cust_list",
joinColumns = {
@JoinColumn(name = "cust_id")},
inverseJoinColumns = {
@JoinColumn(name = "list_id")})
private List<ListCadeaux> listscadeaux = new ArrayList<ListCadeaux>();
//...
} |
entity ListCadeaux
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| @Entity
@Table(name = "t_list")
public class ListCadeaux implements Serializable, Comparable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long list_id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "list_type_id")
private Type type = new Type();
@Temporal(TemporalType.DATE)
@Column(name = "list_creation_date")
private Date creation_date;
@Temporal(TemporalType.DATE)
@Column(name = "list_event_date")
private Date event_date;
@Column(name = "list_av_amount")
private Double av_amount = 0.0;
@Column(name = "list_status")
private String status;// en cours ou cloturée
@ManyToMany
private List<Customer> customers;
//...
} |
la joinTable(est-t elle bien représentée?8O)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @Entity
@Table(name = "t_cust_list")
public class CustList implements Comparable, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long cust_list_id;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "cust_id")
private Customer customer = new Customer();
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "list_id")
private ListCadeaux list_cadeaux = new ListCadeaux();
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "status_id")
private Status status = new Status();
//...
} |
le statless bean
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
| @Stateless
public class ListCadeauxBean implements ListCadeauxRemote, ListCadeauxLocal {
@PersistenceContext(unitName = "ListCadeaux_PU")
private EntityManager em;
//==============================================================
//= methode publiques pour le client sur 1 liste de cadeaux =
//==============================================================
/**
*
* @param custlist
* @return
*/
public ListCadeaux createList(ListCadeaux listcadeaux) {
// On s'assure de la validité des paramètres
if (listcadeaux == null) {
throw new ValidationException("List object is null");
}
em.persist(listcadeaux);
return listcadeaux;
}
/**
* find an object by his id
* @param cust_list_id
* @return
*/
public ListCadeaux findList(Long list_id) {
// On s'assure de la validité des paramètres
if (list_id == null) {
throw new ValidationException("List id is invalid");
}
ListCadeaux listcadeaux;
// On recherche l'objet à partir de son identifiant
listcadeaux = em.find(ListCadeaux.class, list_id);
return listcadeaux;
}
/**
* update afeter changing data
* @param custlist
* @return
*/
public ListCadeaux updateList(ListCadeaux listcadeaux) {
// On s'assure de la validité des paramètres
if (listcadeaux == null) {
throw new ValidationException("CustList object is null");
}
// On modifie l'objet de la base de données
em.merge(listcadeaux);
return listcadeaux;
}
/**
* find the custlist with parameters
* @param custlist
* @return
*/
public List<ListCadeaux> searchLists(ListCadeaux listcadeaux) {
Query query;
List<ListCadeaux> list_s_cadeaux;
String sWhere = "";
if (listcadeaux != null) {
if (listcadeaux.getAv_amount() != 0) {
if (sWhere.equals("")) {
sWhere = " where av_amount like '%" + listcadeaux.getAv_amount() + "%'";
} else {
sWhere = sWhere + " and av_amount like '% " + listcadeaux.getAv_amount() + " %'";
}
}
if (!listcadeaux.getStatus().equals("")) {
if (sWhere.equals("")) {
sWhere = " where status like '%" + listcadeaux.getStatus() + "%'";
} else {
sWhere = sWhere + " and status like '% " + listcadeaux.getStatus() + " %'";
}
}
if (listcadeaux.getType().getType_name() != null) {
if (sWhere.equals("")) {
sWhere = " where t.type_name like '%" + listcadeaux.getType().getType_name()+ "%'";
} else {
sWhere = sWhere + " and t.type_name like '% " + listcadeaux.getType().getType_name()+ " %'";
}
}
}
//query = em.createQuery("SELECT cl FROM CustList cl JOIN cl.customer c JOIN cl.list_cadeaux lc" + sWhere);//JOIN cl.list_cadeaux lc
query = em.createQuery("SELECT l FROM ListCadeaux l JOIN l.type t " + sWhere);
list_s_cadeaux = query.getResultList();
return list_s_cadeaux;
}
/**
* find the types
* @param type
* @return
*/
public List<Type> searchTypes(Type type) {
Query query;
List<Type> types;
String sWhere = "";
if (type != null) {
if (!type.getType_name().equals("")) {
if (sWhere.equals("")) {
sWhere = " where type_name like '%" + type.getType_name() + "%'";
} else {
sWhere = sWhere + " and type_name like '%" + type.getType_name() + "%'";
}
}
}
query = em.createQuery("SELECT t FROM Type t " + sWhere + " ORDER by t.type_name");
types = query.getResultList();
return types;
}
/**
* delete the object from db
* @param custlist
*/
public void deleteList(ListCadeaux listcadeaux) {
em.remove(em.merge(listcadeaux));
}
//==============================================================
//= methode publiques pour le client sur 1 liste de cadeaux =
//==============================================================
public CustList createCustList(CustList custlist) {
// On s'assure de la validité des paramètres
if (custlist == null) {
throw new ValidationException("custlist object is null");
}
em.persist(custlist);
return custlist;
}
public CustList findCustList(Long cust_list_id) {
// On s'assure de la validité des paramètres
if (cust_list_id == null) {
throw new ValidationException("custlist id is invalid");
}
CustList custlist;
// On recherche l'objet à partir de son identifiant
custlist = em.find(CustList.class, cust_list_id);
return custlist;
}
public CustList updateCustlist(CustList custlist) {
// On s'assure de la validité des paramètres
if (custlist == null) {
throw new ValidationException("CustList object is null");
}
// On modifie l'objet de la base de données
em.merge(custlist);
return custlist;
}
public List<CustList> searchCustLists(CustList custlist) {
Query query;
List<CustList> custlits;
String sWhere = "";
if (custlist != null) {
if (custlist.getCustomer().getFirst_name().equals("")) {
if (sWhere.equals("")) {
sWhere = " where c.first_name like '%" + custlist.getCustomer().getFirst_name() + "%'";
} else {
sWhere = sWhere + " and c.first_name like '% " + custlist.getCustomer().getFirst_name() + " %'";
}
}
if (custlist.getCustomer().getLast_name().equals("")) {
if (sWhere.equals("")) {
sWhere = " where c.last_name like '%" + custlist.getCustomer().getLast_name() + "%'";
} else {
sWhere = sWhere + " and c.last_name like '% " + custlist.getCustomer().getLast_name() + " %'";
}
}
/*if (custlist.getCustomer().getEmail().equals("")) {
if (sWhere.equals("")) {
sWhere = " where c.email like '%" + custlist.getCustomer().getEmail() + "%'";
} else {
sWhere = sWhere + " and c.email like '% " + custlist.getCustomer().getEmail() + " %'";
}
}*/
/*if (custlist.getList_cadeaux().getType().getType_name().equals("")) {
if (sWhere.equals("")) {
sWhere = " where lc.t.type_name like '%" + custlist.getCustomer().getFirst_name() + "%'";
} else {
sWhere = sWhere + " and c.first_name like '% " + custlist.getCustomer().getFirst_name() + " %'";
}
}*/
/*if (custlist.getList_cadeaux().getStatus().equals("")) {
if (sWhere.equals("")) {
sWhere = " where lc.status like '%" + custlist.getList_cadeaux().getStatus() + "%'";
} else {
sWhere = sWhere + " and lc.status like '% " + custlist.getList_cadeaux().getStatus() + " %'";
}
}*/
}
query = em.createQuery("SELECT cl FROM CustList cl JOIN cl.customer c JOIN cl.list_cadeaux lc" + sWhere);//JOIN cl.list_cadeaux lc
custlits = query.getResultList();
return custlits;
}
public void deleteCustList(CustList custlist) {
em.remove(em.merge(custlist));
}
} |
le contoller JSF
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| public class ListCadeauxController {
//===========================================================
//= attributs =
//===========================================================
@EJB
private ListCadeauxLocal listCadeauxBean;
private ListCadeaux ListRech = new ListCadeaux();
private ListCadeaux listDetail;
private List<ListCadeaux> list_s_cadeaux;
private CustList custlistRech = new CustList();
private CustList custlistDetail;
private List<CustList> custlists;
private Type type = new Type();
private List<Type> types;
private Map typesCB;
private PagingInfo pagingInfo = new PagingInfo();
//============================================================
//= methodes publiques pour la liste =
//============================================================
/**
*
* @return
*/
public String doCreatList() {
String goTo = null;
ListRech = listCadeauxBean.createList(ListRech);
goTo = "list.created";
return goTo;
}
/**
*
*/
public String doFindList() {
String goTo = null;
listDetail = listCadeauxBean.findList(getParamId("list_id"));
goTo = "list.displayed";
return goTo;
}
/**
*
*/
public String doFindLists() {
String goTo = null;
list_s_cadeaux = listCadeauxBean.searchLists(ListRech);
goTo = "lists.displayed";
return goTo;
}
/**
*
* @return
*/
public Map getAllTypes() {
types = listCadeauxBean.searchTypes(null);
if (typesCB == null) {
typesCB = new TreeMap();
for (Type t : types) {
typesCB.put(t.getType_name(), new Long(t.getType_id()));
}
}
return typesCB;
}
/**
* after making change save in db
*/
public void doSave() {
listCadeauxBean.updateList(listDetail);
}
//============================================================
//= methodes publiques pour le client sur la liste =
//============================================================
/**
*
* @return
*/
public String doCreatCustList() {
String goTo = null;
custlistRech = listCadeauxBean.createCustList(custlistRech);
goTo = "custlist.created";
return goTo;
}
/**
*
*/
public String doFindCustList() {
String goTo = null;
custlistDetail = listCadeauxBean.findCustList(getParamId("cust_list_id"));
goTo = "custlist.displayed";
return goTo;
}
/**
* find the list of the cust
*/
public String doFindCustLists() {
String goTo = null;
custlists = listCadeauxBean.searchCustLists(custlistRech);
goTo = "custlists.displayed";
return goTo;
}
//===========================================
//= Fonctions utilitaires =
//===========================================
/**
* @return the types
*/
public Long getParamId(String sParam) {
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> map = context.getExternalContext().getRequestParameterMap();
String result = map.get(sParam);
return Long.valueOf(result);
//return Long.valueOf(result);
}
// getters and setters
} |
et le jsp pour finir
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173
|
<h:form>
<table>
<tr>
<td><h:outputText value="#{msgs.first_name}" /></td>
<td><h:inputText value="#{list.custlistRech.customer.first_name}" /></td>
<%--
<h:inputText id="lastName" value="#{personCtrl.newPerson.lastName}"
required="true" requiredMessage="Nom obligatoire" />
<h:message for="first_name" />
--%>
</tr>
<tr>
<td><h:outputText value="#{msgs.last_name}" /></td>
<td><h:inputText value="#{list.custlistRech.customer.last_name}" /></td>
</tr>
<tr>
<td><h:outputText value="#{msgs.type}" /></td>
<td>
<h:selectOneMenu value="#{list.listRech.type.type_id}">
<f:selectItems value="#{list.allTypes}"/>
</h:selectOneMenu>
</td>
</tr>
<tr>
<td><h:outputText value="#{msgs.status}" /></td>
<td><h:inputText value="#{list.listRech.status}" /></td>
</tr>
<tr>
<td><h:commandButton value="#{msgs.Rech}" action="#{list.doFindLists}" /></td>
</tr>
</table>
</h:form>
<h:form>
<h:dataTable value="#{list.custlists}"
var="custlistsRow">
<f:facet name="caption">
<h:outputText value="#{msgs.windowShowLists}"/>
</f:facet>
<h:column footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.first_name}" />
</f:facet>
<h:outputText value="#{custlistsRow.customer.first_name}" />
<f:facet name="footer">
<h:outputText value="#{msgs.first_name}" />
</f:facet>
</h:column>
<h:column footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.last_name}" />
</f:facet>
<h:outputText value="#{custlistsRow.customer.last_name}" />
<f:facet name="footer">
<h:outputText value="#{msgs.last_name}" />
</f:facet>
</h:column>
</h:dataTable>
<h:dataTable value="#{list.list_s_cadeaux}" border="3" rules="all"
var="listsRow">
<h:column footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.status}" />
</f:facet>
<h:commandLink action="#{list.doFindList}"
value="#{listsRow.status}">
<f:param name="list_id" value="#{listsRow.list_id}" />
</h:commandLink>
<%--<h:outputText value="#{listRow.status}" />--%>
<f:facet name="footer">
<h:outputText value="#{msgs.status}" />
</f:facet>
</h:column>
<h:column footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.av_amount}" />
</f:facet>
<h:outputText value="#{listsRow.av_amount}" />
<f:facet name="footer">
<h:outputText value="#{msgs.av_amount}" />
</f:facet>
</h:column>
<h:column footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.creation_date}" />
</f:facet>
<h:outputText value="#{listsRow.creation_date}" />
<f:facet name="footer">
<h:outputText value="#{msgs.creation_date}" />
</f:facet>
</h:column>
<h:column footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.event_date}" />
</f:facet>
<h:outputText value="#{listsRow.event_date}" />
<f:facet name="footer">
<h:outputText value="#{msgs.event_date}" />
</f:facet>
</h:column>
<h:column footerClass="columnFooter">
<f:facet name="header">
<h:outputText value="#{msgs.type}" />
</f:facet>
<h:outputText value="#{listsRow.type.type_name}"/>
<f:facet name="footer">
<h:outputText value="#{msgs.type}" />
</f:facet>
</h:column>
</h:dataTable>
</h:form>
<h:form title="Detail">
<table>
<tr>
<td><h:outputText value="#{msgs.first_name}" /></td>
<td><h:inputText value="#{list.custlistDetail.customer.first_name}" /></td>
</tr>
<tr>
<td><h:outputText value="#{msgs.last_name}" /></td>
<td><h:inputText value="#{list.custlistDetail.customer.last_name}" /></td>
</tr>
<tr>
<td><h:outputText value="#{msgs.status}" /></td>
<td><h:inputText value="#{list.listDetail.status}" /></td>
</tr>
<tr>
<td><h:outputText value="#{msgs.av_amount}" /></td>
<td><h:inputText value="#{list.listDetail.av_amount}" /></td>
</tr>
<tr>
<td><h:outputText value="#{msgs.creation_date}" /></td>
<td><h:inputText value="#{list.listDetail.creation_date}" >
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
</td>
</tr>
<tr>
<td><h:outputText value="#{msgs.event_date}" /></td>
<td>
<h:inputText value="#{list.listDetail.event_date}" >
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:inputText>
</td>
</tr>
<tr>
<td><h:outputText value="#{msgs.type}" /></td>
<td>
<h:selectOneMenu value="#{list.listDetail.type.type_id}">
<f:selectItems value="#{list.allTypes}"/>
</h:selectOneMenu>
</td>
</tr>
<tr>
<td><h:commandButton value="#{msgs.Sauve}" action="#{list.doSave}" /></td>
</tr>
</table>
</h:form> |
voila j'ai essayé d'être le plus claire merci d'avance à vous