entity beans
HejJeg har lidt problemer med object mapping og entity beans.
Jeg har følgende mapping:
customer 1 ----- * orders 1 ------- * orderlines.
udsnit af orders:
@Entity(name = "Orders")
public class Orders implements Serializable {
//setters and getters er dannet udfra følgende
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="orderId")
public int orderId;
@Temporal(TemporalType.DATE)
@Column(name="orderDate")
public Date orderDate;
@Column(name="customerId",insertable=false,updatable=false)
private int customerId;
@Column(name="comments")
public String comments;
@Column(name="orderTotal")
public Double orderTotal;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
private Collection<OrderLine> orderLine;
@ManyToOne
@JoinColumn(name="customerId")
public Customer customer;
/*
* Skal oprettes ifølge EJB 3.0 specifikation
*/
public Orders(){}
public Orders(Date orderDate, String comments, Double orderTotal) {
this.orderDate = orderDate;
this.comments = comments;
this.orderTotal = orderTotal;
}
udsnit af customer:
@Entity
public class Customer implements Serializable{
//setters and getters er dannet udfra følgende
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="customerId")
public int customerId;
@Column(name="name")
public String name;
@Column(name="organisation")
public String organisation = null;
@Column(name="street")
public String street;
@Column(name="zip")
public String zip;
@Column(name="country")
public String country;
@Column(name="userId")
public String brugerId;
@Column(name="password")
public String password;
@Column(name="email")
public String email;
@OneToMany(cascade=CascadeType.ALL)
private Collection<Orders> orders;
/*
* Skal oprettes ifølge EJB 3.0 specifikation
*/
public Customer(){}
public Customer(int customerId, String name, String organisation, String street, String zip, String country, String brugerId, String password, String email) {
this.customerId = customerId;
this.name = name;
this.organisation = organisation;
this.street = street;
this.zip = zip;
this.country = country;
this.brugerId = brugerId;
this.password = password;
this.email = email;
}
udsnit af OrderLine
@Entity(name = "OrderLine")
public class OrderLine implements Serializable {
//setters and getters er dannet udfra følgende
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="orderLineId")
public int orderLineId;
@Column(name="orderId",insertable=false,updatable=false)
public int orderId;
@Column(name="productId")
public int productId;
@Column(name="quantity")
public Double quantity;
@Column(name="lineTotal")
public Double lineTotal;
@ManyToOne
@JoinColumn(name="orderId")
public Orders orders;
/**
*
* @param orderLineNo
* @param productId
* @param quantity
* @param lineTotal
*/
/*
* Skal oprettes ifølge EJB 3.0 specifikation
*/
public OrderLine(){}
public OrderLine(Double quantity, Double lineTotal, int productId) {
this.quantity = quantity;
this.lineTotal = lineTotal;
this.productId = productId;
}
Jeg opretter order fra en MDB som da den lytter på åen kø. Her er et udsnit fra bønnen.
Order customerOrder = new Orders();
//get customer retunerer en customer.
customerOrder.setCustomer(getCustomer());
//createOrderLines() retunere en Collection af orderlines.
customerOrder.setOrderLine(createOrderLines());
og persisterer fra en stateless bean:
udsnit af kode :
private EntityManager entityManager;
public void addOrder(Orders order) {
try{
entityManager.persist(order);
}catch(Exception e){
e.printStackTrace();
}
}
Jeg får i den forbindelse, problemer med at customerID = null. Hvilket den ikke må være ifølge databasen.
Kan det ikke lade sig gøre at persistere en hel order eller skal customer oprettes først?
f.eks. hvis jeg gør følgende virker det fint nok.
public void addOrder(Orders order) {
try{
entityManager.persist(order.getCustomer());
entityManager.persist(order);
}catch(Exception e){
e.printStackTrace();
}
}
Har et spm. mere i denne forbindelse.
Hvad gør jeg ved oprettelse at selve linierne. Dette giver mig et problem med hensyn til at orderId også er null.
public void addOrder(Orders order) {
try{
entityManager.persist(order.getCustomer());
entityManager.persist(order);
List<OrderLine> orderLines = order.getOrderLine();
for (OrderLine orderLine : orderLines){
//Nedenstående er bare til test men der kommer et orderID men dette indsættes ikke i databasen.
System.out.println("OrderID : " + order.getOrderId(););
entityManager.persist(orderLine);
}
}catch(Exception e){
e.printStackTrace();
}
}
Håber at ovenstående er til at forstå ved godt der er en mange spm.