Mapowanie z DTO an encję

Mapowanie z DTO an encję
kiyo
  • Rejestracja:około 8 lat
  • Ostatnio:7 dni
  • Postów:155
0

Mam taką encję:

Kopiuj
@Entity
public class Screening {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "screening_gen")
    @SequenceGenerator(name = "screening_gen", sequenceName = "sc_seq", initialValue = 1001)
    private Long id;
    @NotNull
    @OneToOne
    private Movie movie;
}

Napisałem dla niej DTO:

Kopiuj
public class ScreeningDTO {
    private Long id;
    private Movie movie;
}

Jednak kiedy próbuję mapować z DTO to dostaję:

Kopiuj
List of constraint violations:[
	ConstraintViolationImpl{interpolatedMessage='must not be null', propertyPath=movie, rootBeanClass=class model.Screening, messageTemplate='{javax.validation.constraints.NotNull.message}'}]]
2020-01-13 10:20:22.931 ERROR 28418 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction] with root cause

Próbowałem już kilku rozwiązań znalezionych w sieci, ale bez skutku. Stąd moje pytanie jak powinienem to zrobić?
Inicjalizuję dane wysyłając POSTa:

Kopiuj
{
	"movie": {
		"id": 1,
		"title": "The Shawshank Redemption",
		"category": "drama"
	}
}
Kopiuj
@Entity
public class Movie {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @NotNull
    @Size(min = 3)
    private String title;
    @Size(min = 3)
    @NotEmpty
    private String category;
}
edytowany 2x, ostatnio: kiyo
Skoq
pokaż jeszcze klasę Movie
Skoq
próbowałeś debugować? Spróbuj wyłapać moment gdzie null leci, może modelmapper gdzieś się gubi
LA
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Postów:112
0

Czy Movie w DTO i w Encji JPA to ta sama klasa?

LA
  • Rejestracja:ponad 5 lat
  • Ostatnio:10 miesięcy
  • Postów:112
0

Odpisuj w postach, będzie łatwiej.

Problem polega na tym, że do DTO wpakowujesz klasę @Entity, jeśli chcesz tak to mapować to musisz sobie jeszcze stworzyć DTO'sa do Movie.
No, ale ogólnie ten DTOs nie ma chyba sensu, bo w zasadzie wysyłasz dalej i tak 1:1 Encję JPA.

edytowany 1x, ostatnio: lavoholic

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.