Hallo in die Runde,
folgende Konstellation. Ich habe eine n:m-Beziehung zwischen zwei Objekten (Customers und Datasources). Jedoch sind in der Mapping-Tabelle weitere Felder definiert. Daher habe ich neben den beiden Entitys
eine entsprechende Entity für die Mapping-Tabelle gebaut.
Ich versuche gerade vom Customer-Objekt heraus dem Nutzer eine neue Datenquelle zuzuordnen:
Der Controller-Code sieht so aus:
und Thymeleaf so:
Wenn ich aber nun einen Wert auswähle, auf Speichern klicke und mir das Customer-Objekt anzeigen lasse, bekomme ich folgendes Werte zurück.
{
"id" : 1,
"code" : null,
"name" : null,
"customers_datasources" : [ null ]
}
So richtig kann ich mir nicht erklären, warum die Liste customers_datasources leer ist. Bin ich überhaupt richtig oder muss ich das Ganze anders aufziehen.
Danke und Gruß
Patrick
folgende Konstellation. Ich habe eine n:m-Beziehung zwischen zwei Objekten (Customers und Datasources). Jedoch sind in der Mapping-Tabelle weitere Felder definiert. Daher habe ich neben den beiden Entitys
Java:
package myApp.models;
@Entity
@Table(name = "datasources")
public class Datasource implements Serializable {
private static final long serialVersionID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private Integer deleted = 0;
@OneToMany(mappedBy="datasource")
private List<CustomerDatasource> customers_datasources = new ArrayList<>();
}
Java:
package myApp.models;
@Entity
@Table(name = "customers")
public class Customer implements Serializable {
private static final long serialVersionID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private Integer deleted = 0;
@OneToMany(mappedBy="customer")
private List<CustomerDatasource> customers_datasources = new ArrayList<>();
}
eine entsprechende Entity für die Mapping-Tabelle gebaut.
Java:
package myApp.models;
@Entity
@Table(name = "customers_datasources")
public class CustomerDatasource implements Serializable {
private static final long serialSystemVersionID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@ManyToOne
@JoinColumn(name="customer_id")
private Customer customer;
@ManyToOne
@JoinColumn(name="datasource_id")
private Datasource datasource;
private String comment;
private Integer deleted = 0;
}
Ich versuche gerade vom Customer-Objekt heraus dem Nutzer eine neue Datenquelle zuzuordnen:
Der Controller-Code sieht so aus:
Java:
@GetMapping("/datasource/{code}")
public String datasource_add(@PathVariable("code") String code, Model model, RedirectAttributes redirectAttributes) throws JsonProcessingException {
model.addAttribute("customer", customerRepository.findByCode(code));
model.addAttribute("datasources", datasourceRepository.findAll());
model.addAttribute("pageTitle", "Neue Datenquellenzuordnung");
return "customers/form_datasource";
}
und Thymeleaf so:
Java:
<form th:action="@{/customers/datasource_save}" method="post" enctype="multipart/form-data" th:object="${customer}"
style="max-width: 550px; margin: 0 auto">
<input type="text" th:field="*{id}" />
<div class="p-3">
<div class="form-group row">
<label class="col-sm-3 col-form-label" for="dropSV">Systemversion</label>
<div class="col-sm-9">
<select class="form-control" id="dropSV" th:field="*{customers_datasources}">
<option value="0"></option>
<option th:each="datasource : ${datasources}" th:value="${datasource.id}" th:text="${datasource.name}"></option>
</select>
</div>
</div>
<div class="text-center">
<input type="submit" value="Save" class="btn btn-primary btn-sm mr-2" />
<input type="button" value="Cancel" id="btnCancel" class="btn btn-secondary btn-sm" />
</div>
</div>
</form>
Wenn ich aber nun einen Wert auswähle, auf Speichern klicke und mir das Customer-Objekt anzeigen lasse, bekomme ich folgendes Werte zurück.
{
"id" : 1,
"code" : null,
"name" : null,
"customers_datasources" : [ null ]
}
So richtig kann ich mir nicht erklären, warum die Liste customers_datasources leer ist. Bin ich überhaupt richtig oder muss ich das Ganze anders aufziehen.
Danke und Gruß
Patrick