JPA-Mapping Multi-Zeilen mit ElementCollection

Ich versuche zu Folgen, die JPA tutorial und mit ElementCollection aufzunehmen Mitarbeiter Telefon-Nummern:

PHONE (table)
OWNER_ID    TYPE      NUMBER
  1         home      792-0001
  1         work      494-1234
  2         work      892-0005

Kurze version

Was ich brauche, ist eine Klasse wie folgt aus:

@Entity
@Table(name="Phones")
public class PhoneId {
  @Id
  @Column(name="owner_id")
  long owner_id;

  @Embedded
  List<Phone> phones;
}

speichert jede person, die Telefonnummern in einer Sammlung.

Lange version

Folge ich den tutorial-code:

@Entity
@Table(name="Phones")
public class PhoneId {
  @Id
  @Column(name="owner_id")
  long owner_id;

  @ElementCollection
  @CollectionTable(
    name="Phones",
    joinColumns=@JoinColumn(name="owner_id")
  )
  List<Phone> phones = new ArrayList<Phone>();
}

@Embeddable
class Phone {
  @Column(name="type")
  String type = "";
  @Column(name="number")
  String number = "";

  public Phone () {}
  public Phone (String type, String number)
    { this.type = type; this.number = number; }
}

mit einem kleinen Unterschied, dass ich immer nur eine Tabelle. Ich habe versucht, verwenden Sie den folgenden code hinzu, um Datensätze zu dieser Tabelle:

public static void main (String[] args) {
  EntityManagerFactory entityFactory =
     Persistence.createEntityManagerFactory("Tutorial");
  EntityManager entityManager = entityFactory.createEntityManager();

  //Create new entity
  entityManager.getTransaction().begin();
  Phone ph = new Phone("home", "001-010-0100");
  PhoneId phid = new PhoneId();
  phid.phones.add(ph);
  entityManager.persist(phid);
  entityManager.getTransaction().commit();

  entityManager.close();
}

aber es hält werfen von Ausnahmen

Internal Exception: org.postgresql.util.PSQLException: FEHLER: null
Wert in der Spalte "Typ" verletzt not-null-Einschränkung Detail: Versagt
Zeile enthält (0, null, null). Error Code: 0 Aufruf: INSERT INTO Telefone
(owner_id) VALUES (?) binden => [1 parameter gebunden] Query:
InsertObjectQuery(tutorial.Phone1@162e295)

Was habe ich falsch gemacht?

InformationsquelleAutor Yang | 2013-06-21
Schreibe einen Kommentar