seam-gen code for many-to-one associations and reference dat
lawrieg Feb 14, 2007 11:32 AMHi,
I'm trying to understand the seam-generated code for many-to-one associations, and whether / how I need to modify it if I'm dealing with reference data that either is read-only (i.e. will be an Enum and will have matching database lookup table), or modified only very occasionally by an administrator (will be a class mapped to a database lookup/reference table).
seam-gen generates the following Seam Application Framework EntityHome code for my example project's Customer class:
@Name("customerHome")
public class CustomerHome extends EntityHome<Customer> {
@In(value = "#{statusHome.managedInstance}", required = false)
Status status;
@In(value = "#{customerTypeHome.managedInstance}", required = false)
CustomerType customerType;
public void setCustomerId(Integer id) {
setId(id);
}
public Integer getCustomerId() {
return (Integer) getId();
}
@Override
protected Customer createInstance() {
Customer customer = new Customer();
return customer;
}
public void wire() {
if (status != null) {
getInstance().setStatus(status);
}
if (customerType != null) {
getInstance().setCustomerType(customerType);
}
}
public boolean isWired() {
if (getInstance().getStatus() == null)
return false;
if (getInstance().getCustomerType() == null)
return false;
return true;
}
public Customer getManagedInstance() {
return isManaged() ? getInstance() : null;
}
}and CustomerEdit.page.xml is generated as follows
<page no-conversation-view-id="/CustomerList.xhtml">
<restrict>#{identity.loggedIn}</restrict>
<begin-conversation join="true"/>
<action execute="#{customerHome.wire}"/>
<param name="customerFrom"/>
<param name="customerId" value="#{customerHome.customerId}"/>
<param name="statusFrom"/>
<param name="statusId" value="#{statusHome.statusId}"/>
<param name="customerTypeFrom"/>
<param name="customerTypeId" value="#{customerTypeHome.customerTypeId}"/>
<navigation from-action="#{customerHome.persist}">
<end-conversation/>
<redirect view-id="/Customer.xhtml"/>
</navigation>
<navigation from-action="#{customerHome.update}">
<end-conversation/>
<redirect view-id="/Customer.xhtml"/>
</navigation>
<navigation from-action="#{customerHome.remove}">
<end-conversation/>
<redirect view-id="/CustomerList.xhtml"/>
</navigation>
</page>So if I want Status to be an Enum, and CustomerType to be an immutable class that will be mapped to a database lookup/reference table, then what changes should I make to the seam-gen code???
I particular, I'm confused by the need for the wire() and isWired() methods - can anyone shed any light on what they are for and whether I'll still need them?
Thanks,
Lawrie