title: persisting a many to many relationship using hibernate and seam
body: <p>i have a program that communicates with an existing database. There is a composite table that has an employee and a vehicle as its composite key. On the edit or add employee page, their is a dropdown box to select which vehicles the employee prefers and then stores the vehicle list in a hashtable in the employee class. However, the list will not persist, or store, in  the composite table. I am new to seam and have spent all day trying to figure this out. Any help would be appreciated.</p>
  
  <p>Here are some of my classes:
  Employee:</p>
  
  <pre><code>@Entity
  @Table(name = "flower_store_employee", schema = "dbo", catalog = "tyler")
  public class FlowerStoreEmployee implements java.io.Serializable, Comparable&lt;FlowerStoreEmployee&gt; {
  
  /**
   * 
   */
  private static final long serialVersionUID = -1727355085366851150L;
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name = "employee_id", unique = true, nullable = false)
  private Integer employeeId;
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "address_id")
  private FlowerStoreAddress flowerStoreAddress;
  @Column(name = "name_first", length = 25)
  @Length(max = 25)
  private String nameFirst;
  @Column(name = "name_last", length = 25)
  @Length(max = 25)
  private String nameLast;
  @Column(name = "ssn")
  private String ssn;
  @Column(name = "phone")
  private String phone;
  @Column(name = "pay")
  private int pay;
  @OneToMany(fetch = FetchType.LAZY, mappedBy = "flowerStoreEmployee")
  private Set&lt;FlowerStoreDelivery&gt; flowerStoreDeliveries = new HashSet&lt;FlowerStoreDelivery&gt;(
          0);
  @Cascade({org.hibernate.annotations.CascadeType.ALL })
  @ManyToMany(fetch = FetchType.LAZY, mappedBy = "flowerStoreEmployees")
  //@JoinTable(name = "flower_store_emp_vehicle", schema = "dbo", catalog = "tyler", joinColumns = { @JoinColumn(name = "vehicle_id", nullable = false, updatable = true) }, inverseJoinColumns = { @JoinColumn(name = "employee_id", nullable = false, updatable = true) })
  private Set&lt;FlowerStoreVehicle&gt; flowerStoreVehicles = new HashSet&lt;FlowerStoreVehicle&gt;(
          0);
  public FlowerStoreEmployee() {
  }
  
  public FlowerStoreEmployee(int employeeId) {
      this.employeeId = employeeId;
  }
  
  public FlowerStoreEmployee(FlowerStoreAddress flowerStoreAddress, String nameFirst,
          String nameLast, String ssn, String phone, int pay,
          Set&lt;FlowerStoreDelivery&gt; flowerStoreDeliveries,
          Set&lt;FlowerStoreVehicle&gt; flowerStoreVehicles) {
      this.employeeId = employeeId;
      this.flowerStoreAddress = flowerStoreAddress;
      this.nameFirst = nameFirst;
      this.nameLast = nameLast;
      this.ssn = ssn;
      this.phone = phone;
      this.pay = pay;
      this.flowerStoreDeliveries = flowerStoreDeliveries;
      this.flowerStoreVehicles = flowerStoreVehicles;
  }
  
  
  public int getEmployeeId() {
      return this.employeeId;
  }
  
  public void setEmployeeId(int employeeId) {
      this.employeeId = employeeId;
  }
  
  
  public FlowerStoreAddress getFlowerStoreAddress() {
      return this.flowerStoreAddress;
  }
  
  public void setFlowerStoreAddress(FlowerStoreAddress flowerStoreAddress) {
      this.flowerStoreAddress = flowerStoreAddress;
  }
  
  
  public String getNameFirst() {
      return this.nameFirst;
  }
  
  public void setNameFirst(String nameFirst) {
      this.nameFirst = nameFirst;
  }
  
  
  public String getNameLast() {
      return this.nameLast;
  }
  
  public void setNameLast(String nameLast) {
      this.nameLast = nameLast;
  }
  
  
  public String getSsn() {
      return this.ssn;
  }
  
  public void setSsn(String ssn) {
      this.ssn = ssn;
  }
  
  
  public String getPhone() {
      return this.phone;
  }
  
  public void setPhone(String phone) {
      this.phone = phone;
  }
  
  
  public int getPay() {
  
      return this.pay;
  }
  
  public void setPay(int pay) {
      this.pay = pay;
  }
  
  public void setPay(String pay){
      this.pay = Integer.parseInt(pay);
  }
  
  public Set&lt;FlowerStoreDelivery&gt; getFlowerStoreDeliveries() {
      return this.flowerStoreDeliveries;
  }
  
  public void setFlowerStoreDeliveries(
          Set&lt;FlowerStoreDelivery&gt; flowerStoreDeliveries) {
      this.flowerStoreDeliveries = flowerStoreDeliveries;
  }
  
  
  public Set&lt;FlowerStoreVehicle&gt; getFlowerStoreVehicles() {
      return this.flowerStoreVehicles;
  }
  
  public void setFlowerStoreVehicles(
          Set&lt;FlowerStoreVehicle&gt; flowerStoreVehicles) {
      this.flowerStoreVehicles = flowerStoreVehicles;
  }
  
  public int compareTo(FlowerStoreEmployee emp) {
      if(this.employeeId &gt; emp.employeeId){
          return 1;
      }
      else 
          if(this.employeeId &lt; emp.employeeId){
                  return -1;
          }
      else{
          return 0;
      }
  }
  </code></pre>
  
  <p>Vehicle:</p>
  
  <pre><code>@Entity
  @Table(name = "flower_store_vehicle", schema = "dbo", catalog = "tyler")
  public class FlowerStoreVehicle implements java.io.Serializable {
  
  /**
   * 
   */
  private static final long serialVersionUID = 5349431404739349258L;
  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name = "vehicle_id", unique = true, nullable = false)
  private int vehicleId;
  @Column(name = "vin", length = 17)
  @Length(max = 17)
  private String vin;
  @Column(name = "license", length = 10)
  @Length(max = 10)
  private String license;
  @Column(name = "make", length = 15)
  @Length(max = 15)
  private String make;
  @Column(name = "model", length = 20)
  @Length(max = 20)
  private String model;
  @Column(name = "color", length = 20)
  @Length(max = 20)
  private String color;
  @OneToMany(fetch = FetchType.LAZY, mappedBy = "flowerStoreVehicle")
  private Set&lt;FlowerStoreDelivery&gt; flowerStoreDeliveries = new HashSet&lt;FlowerStoreDelivery&gt;(
          0);
  @ManyToMany(fetch = FetchType.LAZY)
  @JoinTable(name = "flower_store_emp_vehicle", schema = "dbo", catalog = "tyler", joinColumns = { @JoinColumn(name = "vehicle_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "employee_id", nullable = false, updatable = false) })
  private Set&lt;FlowerStoreEmployee&gt; flowerStoreEmployees = new HashSet&lt;FlowerStoreEmployee&gt;(
          0);
  
  public FlowerStoreVehicle() {
  }
  
  public FlowerStoreVehicle(int vehicleId) {
      this.vehicleId = vehicleId;
  }
  
  public FlowerStoreVehicle(int vehicleId, String vin, String license,
          String make, String model, String color,
          Set&lt;FlowerStoreDelivery&gt; flowerStoreDeliveries,
          Set&lt;FlowerStoreEmployee&gt; flowerStoreEmployees) {
      this.vehicleId = vehicleId;
      this.vin = vin;
      this.license = license;
      this.make = make;
      this.model = model;
      this.color = color;
      this.flowerStoreDeliveries = flowerStoreDeliveries;
      this.flowerStoreEmployees = flowerStoreEmployees;
  }
  
  public int getVehicleId() {
      return this.vehicleId;
  }
  
  public void setVehicleId(int vehicleId) {
      this.vehicleId = vehicleId;
  }
  
  public String getVin() {
      return this.vin;
  }
  
  public void setVin(String vin) {
      this.vin = vin;
  }
  
  public String getLicense() {
      return this.license;
  }
  
  public void setLicense(String license) {
      this.license = license;
  }
  
  public String getMake() {
      return this.make;
  }
  
  public void setMake(String make) {
      this.make = make;
  }
  
  public String getModel() {
      return this.model;
  }
  
  public void setModel(String model) {
      this.model = model;
  }
  
  public String getColor() {
      return this.color;
  }
  
  public void setColor(String color) {
      this.color = color;
  }
  
  
  public Set&lt;FlowerStoreDelivery&gt; getFlowerStoreDeliveries() {
      return this.flowerStoreDeliveries;
  }
  
  public void setFlowerStoreDeliveries(
          Set&lt;FlowerStoreDelivery&gt; flowerStoreDeliveries) {
      this.flowerStoreDeliveries = flowerStoreDeliveries;
  }
  
  public Set&lt;FlowerStoreEmployee&gt; getFlowerStoreEmployees() {
      return this.flowerStoreEmployees;
  }
  
  public void setFlowerStoreEmployees(
          Set&lt;FlowerStoreEmployee&gt; flowerStoreEmployees) {
      this.flowerStoreEmployees = flowerStoreEmployees;
  }
  
  }
  </code></pre>
  
  <p>CompositeTableID:</p>
  
  <pre><code>/**
   * FlowerStoreEmpVehicleId generated by hbm2java
   */
  @Embeddable
  public class FlowerStoreEmpVehicleId implements java.io.Serializable {
  
  private int vehicleId;
  private int employeeId;
  
  public FlowerStoreEmpVehicleId() {
  }
  
  public FlowerStoreEmpVehicleId(int vehicleId, int employeeId) {
      this.vehicleId = vehicleId;
      this.employeeId = employeeId;
  }
  
  @Column(name = "vehicle_id", nullable = false)
  public int getVehicleId() {
      return this.vehicleId;
  }
  
  public void setVehicleId(int vehicleId) {
      this.vehicleId = vehicleId;
  }
  
  @Column(name = "employee_id", nullable = false)
  public int getEmployeeId() {
      return this.employeeId;
  }
  
  public void setEmployeeId(int employeeId) {
      this.employeeId = employeeId;
  }
  
  public boolean equals(Object other) {
      if ((this == other))
          return true;
      if ((other == null))
          return false;
      if (!(other instanceof FlowerStoreEmpVehicleId))
          return false;
      FlowerStoreEmpVehicleId castOther = (FlowerStoreEmpVehicleId) other;
  
      return (this.getVehicleId() == castOther.getVehicleId())
              &amp;&amp; (this.getEmployeeId() == castOther.getEmployeeId());
  }
  
  public int hashCode() {
      int result = 17;
  
      result = 37 * result + this.getVehicleId();
      result = 37 * result + this.getEmployeeId();
      return result;
  }
  
  }
  </code></pre>
  
  <p>CompositeTable:</p>
  
  <pre><code>@Entity
  @Table(name = "flower_store_emp_vehicle", schema = "dbo", catalog = "tyler")
  public class FlowerStoreEmpVehicle implements java.io.Serializable {
  
  private FlowerStoreEmpVehicleId id;
  
  public FlowerStoreEmpVehicle() {
  }
  
  public FlowerStoreEmpVehicle(FlowerStoreEmpVehicleId id) {
      this.id = id;
  }
  
  @EmbeddedId
  @AttributeOverrides({
          @AttributeOverride(name = "vehicleId", column = @Column(name = "vehicle_id", nullable = false)),
          @AttributeOverride(name = "employeeId", column = @Column(name = "employee_id", nullable = false)) })
  @NotNull
  public FlowerStoreEmpVehicleId getId() {
      return this.id;
  }
  
  public void setId(FlowerStoreEmpVehicleId id) {
      this.id = id;
  }
  
  }
  </code></pre>
  
  <p>and here is the code to save the employee:</p>
  
  <pre><code>public String addEmployee(){
      Set&lt;FlowerStoreVehicle&gt; vehicleSet = new HashSet&lt;FlowerStoreVehicle&gt;();
      FlowerStoreEmployee n = new FlowerStoreEmployee();
      if(first!=null &amp;&amp; first!=""){
          n.setNameFirst(first);
      }
      if(last!=null &amp;&amp; last!=""){
          n.setNameLast(last);
      }
      if(pay!=null &amp;&amp; pay!=""){
          int intPay = (int)(Double.parseDouble(pay)*100);
          n.setPay(intPay);
      }
      if(phone!=null &amp;&amp; phone!=""){
          n.setPhone(phone);
      }
      if(ssn!=null &amp;&amp; ssn!=""){
          n.setSsn(ssn);
      }
      if(vehicle!=null &amp;&amp; vehicle!=""){
          String[] vehStr = vehicle.split(" ");
          for(int i = 0; i &lt; vehStr.length; i++){
              int vehId = Integer.parseInt(vehStr[i]);
              vehicleSet.add(entityManager.find(FlowerStoreVehicle.class, vehId));
          }
      }
      if(!vehicleSet.isEmpty()){
          n.setFlowerStoreVehicles(vehicleSet);
      }
      entityManager.persist(n);
      if(zip!=null &amp;&amp; zip!=""){
          FlowerStoreZip zipCode = entityManager.find(FlowerStoreZip.class, Integer.parseInt(zip));
          if(zipCode==null){
              zipCode = new FlowerStoreZip();
              if(zip!=null &amp;&amp; zip!=""){
                  zipCode.setZipCode(Integer.parseInt(zip));
          }
          if(city!=null &amp;&amp; city!=""){
              zipCode.setCity(city);
          }
          if(state!=null &amp;&amp; city!=""){
              zipCode.setState(state);
          }
          entityManager.persist(zipCode);
          }
      }
      FlowerStoreAddress add = new FlowerStoreAddress();
      if(house!=null &amp;&amp; house!=""){
          add.setHouseNumber(Integer.parseInt(house));
      }
      if(street!=null &amp;&amp; street!=""){
          add.setStreet(street);
      }
      if(zip!=null &amp;&amp; zip!=""){
          add.setFlowerStoreZip(entityManager.find(FlowerStoreZip.class, Integer.parseInt(zip)));
      }
      return "/employee.xhtml";
  }
  </code></pre>
  
  <p>If any more info is needed please let me know. Any help will be greatly appreciated. thank you</p>