# One to Many bekomm es nicht hin



## OnDemand (10. Jun 2018)

Hallo zusammen,

ich versuche eine one to Many Beziehung hinzubekommen,

Tabelle products
products_id (AI, PK)
products_name


Tabelle attribute
attribute_id( AI, PK)



Jedes product soll mehrere Attribute haben


Wenn ich in Eclipse Create Entities from JPA aufrufe, schlägt er immer 1 : 1 vor

was hab ich falsch gemacht an der Tabelle attributes? Wenn ich von products auf attributes verlinke, bekomme ich * : 1 aber das ist falsch rum...


----------



## mihe7 (10. Jun 2018)

Wenn jedes Produkt mehrere Attribute haben soll, musst Du in der Datenbank in Attribute einen Fremdschlüssel definieren, der das Produkt referenziert. Du hast es umgekehrt, d. h. n Produkte können sich auf 1 Attribut beziehen.


----------



## OnDemand (10. Jun 2018)

Danke, aber leider nicht:


----------



## mrBrown (10. Jun 2018)

Warum schreibst du nicht einfach direkt die Java-Klassen?


----------



## mihe7 (10. Jun 2018)

@mrBrown: das wäre zu einfach 
@NicoDeluxe: Mal ein Beispiel:

```
CREATE TABLE A(
  ID INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
  BEZEICHNUNG VARCHAR(50) NOT NULL
);
CREATE TABLE B(
  ID INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  BEZEICHNUNG VARCHAR(50) NOT NULL
);
```
Damit hast Du zwei unabhängige Tabellen. Wenn Du jetzt willst, dass es zu einem A mehrere B geben kann, kann B etwa so aussehen:

```
CREATE TABLE B(
  ID INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  A_ID INT(11),
  BEZEICHNUNG VARCHAR(50) NOT NULL,
  CONSTRAINT B_A_FK FOREIGN KEY (A_ID) REFERENCES A(ID)
);
```
Weil A_ID auch null sein kann, können B's auch ohne A existieren. Willst Du das nicht, musst Du der Spaltendefinition von A_ID noch eine "NOT NULL"-Einschränkung hinzufügen.


----------



## OnDemand (11. Jun 2018)

vielen Dank, das hat gepasst

nun noch eine Frage. Angenommen ich erstelle Objekte vom Typ Product. Kann ich die Entity-Klasse nehmen und als neues Objekt initialisieren oder muss ich noch ein Pojo erstellen, welches dann wiederum auf das Entityobjekt mapped?


----------



## mihe7 (11. Jun 2018)

Die Entity-Klasse ist ein POJO. Sie hat ggf. nur entsprechende Annotationen.
Du kannst also hergehen und z. B. folgendes machen:

```
EntityManager em;
...
Product p = new Product();
em.persist(product);
```


----------



## OnDemand (11. Jun 2018)

Während Product mit @Entity annotiert ist? suuuuper das wollte ich lesen vielen Dank


----------

