Использование Spring Entity внутри другого Spring Entity - PullRequest
1 голос
/ 19 марта 2019

Получение следующей ошибки при попытке добавить объект «Game» в мой ArrayList, указанный в моем классе User.Это действие было сделано в моем классе контроллера:

"org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.billsheng.huddlespringmvc.models.Game; nested exception is java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.billsheng.huddlespringmvc.models.Game"

Пользовательский объект

@Data
@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String email;
    private String firstName;
    private String lastName;
    private String password;
    private String chosenTeam;
    private int gamesPlayed;
    private int gamesWon;

    @ElementCollection
    private List<Game> games = new ArrayList<>();

    public User(String firstName, String lastName, String email, String password, String chosenTeam, int gamesPlayed, int gamesWon, ArrayList<Game> games) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.chosenTeam = chosenTeam;
        this.gamesPlayed = gamesPlayed;
        this.gamesWon = gamesWon;
        this.games = games;
    }

    public User(String firstName, String lastName, String email, String password, String chosenTeam) {
        this(firstName, lastName, email, password, chosenTeam, 0, 0, null);
    }

    public User(int gamesPlayed, int gamesWon, ArrayList<Game> games) {
        this.gamesPlayed = gamesPlayed;
        this.gamesWon = gamesWon;
        this.games = games;
    }

    public User() {
    }

//getters and setters
}

Игровой объект

@Data
@Entity
public class Game {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String homeTeam;
    private String awayTeam;
    private Date date;
    private String location;
    private String bettingOdds;
    private boolean inProgress;
    private boolean isReviewed;

//getters and setters
}

Я провел некоторое исследование и считаю, что эта проблема связана с тем, что я использую свой объект Game внутри своего объекта User, но я не уверен, в чем конкретно проблема.Вся помощь приветствуется.

1 Ответ

0 голосов
/ 19 марта 2019

@ElementCollection не предполагается использовать с коллекциями объектов;используется с коллекциями @Embeddable.Если Thing является сущностью, вы не используете @ElementCollection, вы используете @OneToMany.

@ElementCollection: определяет коллекцию экземпляров базового типа или встраиваемого класса

Вы можете использовать отображение @OneToMany для установления отношений между пользователем и игровой сущностью.

User.java

@OneToMany(cascade=CascadeType.ALL,fetch= FetchType.LAZY,mappedBy = "user")
private List<Game> games = new ArrayList<>();

//getters and setters

Game.java

@ManyToOne
private User user;

//getters and setters
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...