Witaj wszystkich z góry, mam problem z moim jednym do jednego połączenia, gdy próbuję zalogować się do "Użytkownik" Dostaję ten błąd

Potrzebuję jednego do jednego połączenia, które nie musi być trwałe, że oznacza, że użytkownik może mieć gracza, ale nie musi go mieć i odwrotnie

Ponieważ w moim przypadku serwer Minecraft ma wypełnić tabelę gracza, a strona internetowa wypełnia użytkowników, aby mogli być podłączony.

2020-07-27 23:06:12,537 DEBUG [http-nio-8080-exec-2] nirvanacw.de.demo.user.UserServiceImpl: --> getUserByEmail email=Test@gmx.de
2020-07-27 23:06:12,550 WARN  [http-nio-8080-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: SQL Error: 42122, SQLState: 42S22
2020-07-27 23:06:12,550 ERROR [http-nio-8080-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Feld "player0_.player" nicht gefunden
Column "player0_.player" not found; SQL statement:
select player0_.id as id1_2_1_, player0_.banned as banned2_2_1_, player0_.first_joined as first_jo3_2_1_, player0_.ip_address as ip_addre4_2_1_, player0_.last_joined as last_joi5_2_1_, player0_.player as player8_2_1_, player0_.player_name as player_n6_2_1_, player0_.uuid as uuid7_2_1_, user1_.id as id1_3_0_, user1_.active as active2_3_0_, user1_.created as created3_3_0_, user1_.email as email4_3_0_, user1_.first_name as first_na5_3_0_, user1_.last_name as last_nam6_3_0_, user1_.password as password7_3_0_, user1_.reset_password as reset_pa8_3_0_, user1_.roles as roles9_3_0_, user1_.updated as updated10_3_0_, user1_.username as usernam11_3_0_ from player player0_ left outer join user user1_ on player0_.player=user1_.id where player0_.player=? [42122-200]
2020-07-27 23:06:12,558 ERROR [http-nio-8080-exec-2] org.springframework.security.oauth2.provider.endpoint.TokenEndpoint: Handling error: InternalAuthenticationServiceException, could not prepare statement; SQL [select player0_.id as id1_2_1_, player0_.banned as banned2_2_1_, player0_.first_joined as first_jo3_2_1_, player0_.ip_address as ip_addre4_2_1_, player0_.last_joined as last_joi5_2_1_, player0_.player as player8_2_1_, player0_.player_name as player_n6_2_1_, player0_.uuid as uuid7_2_1_, user1_.id as id1_3_0_, user1_.active as active2_3_0_, user1_.created as created3_3_0_, user1_.email as email4_3_0_, user1_.first_name as first_na5_3_0_, user1_.last_name as last_nam6_3_0_, user1_.password as password7_3_0_, user1_.reset_password as reset_pa8_3_0_, user1_.roles as roles9_3_0_, user1_.updated as updated10_3_0_, user1_.username as usernam11_3_0_ from player player0_ left outer join user user1_ on player0_.player=user1_.id where player0_.player=?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement
org.springframework.security.authentication.InternalAuthenticationServiceException: could not prepare statement; SQL [select player0_.id as id1_2_1_, player0_.banned as banned2_2_1_, player0_.first_joined as first_jo3_2_1_, player0_.ip_address as ip_addre4_2_1_, player0_.last_joined as last_joi5_2_1_, player0_.player as player8_2_1_, player0_.player_name as player_n6_2_1_, player0_.uuid as uuid7_2_1_, user1_.id as id1_3_0_, user1_.active as active2_3_0_, user1_.created as created3_3_0_, user1_.email as email4_3_0_, user1_.first_name as first_na5_3_0_, user1_.last_name as last_nam6_3_0_, user1_.password as password7_3_0_, user1_.reset_password as reset_pa8_3_0_, user1_.roles as roles9_3_0_, user1_.updated as updated10_3_0_, user1_.username as usernam11_3_0_ from player player0_ left outer join user user1_ on player0_.player=user1_.id where player0_.player=?]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement

Jednostka użytkownika:

    package nirvanacw.de.demo.user;
    
    import nirvanacw.de.demo.player.Player;
    import org.hibernate.annotations.GenericGenerator;
    
    import javax.persistence.*;
    import javax.validation.constraints.Email;
    import java.time.ZonedDateTime;
    import java.util.Objects;
    
    @Entity
    @Table(name = "user")
    public class User {
    
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
        @GenericGenerator(name = "native", strategy = "native")
        @Column(name = "id", updatable = false, nullable = false)
        private Long id;
    
        @Email
        @Column(name = "email")
        private String email;
    
        @Column(name ="username")
        private String username;
    
        @Column(name ="password")
        private String password;
    
        @Column(name ="first_name")
        private String firstName;
    
        @Column(name ="last_name")
        private String lastName;
    
        @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        private Player player;
    
        @Column(name ="reset_password")
        private boolean resetPassword;
    
        @Column(name ="roles")
        private String roles;
    
        @Column(name ="active")
        private boolean active;
    
        @Column(name = "created")
        private ZonedDateTime created;
    
        @Column(name = "updated")
        private ZonedDateTime updated;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public boolean isResetPassword() {
            return resetPassword;
        }
    
        public void setResetPassword(boolean resetPassword) {
            this.resetPassword = resetPassword;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getRoles() {
            return roles;
        }
    
        public void setRoles(String roles) {
            this.roles = roles;
        }
    
        public boolean getActive() {
            return active;
        }
    
        public void setActive(boolean active) {
            this.active = active;
        }
    
        public Player getPlayer() {
            return player;
        }
    
        public void setPlayer(Player player) {
            this.player = player;
        }
    
        @PrePersist
        public void onPrePersist() {
            this.created = ZonedDateTime.now();
        }
    
        @PreUpdate
        public void onPreUpdate() {
            this.updated = ZonedDateTime.now();
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", email='" + email + '\'' +
                    ", username='" + username + '\'' +
                    ", firstName='" + firstName + '\'' +
                    ", lastName='" + lastName + '\'' +
                    ", player=" + player +
                    ", resetPassword=" + resetPassword +
                    ", roles='" + roles + '\'' +
                    ", active=" + active +
                    ", created=" + created +
                    ", updated=" + updated +
                    '}';
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            User user = (User) o;
            return resetPassword == user.resetPassword &&
                    active == user.active &&
                    Objects.equals(id, user.id) &&
                    Objects.equals(email, user.email) &&
                    Objects.equals(username, user.username) &&
                    Objects.equals(password, user.password) &&
                    Objects.equals(firstName, user.firstName) &&
                    Objects.equals(lastName, user.lastName) &&
                    Objects.equals(player, user.player) &&
                    Objects.equals(roles, user.roles) &&
                    Objects.equals(created, user.created) &&
                    Objects.equals(updated, user.updated);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(id, email, username, password, firstName, lastName, player, resetPassword, roles, active, created, updated);
        }
    }

Jednostka gracza:

import java.sql.Timestamp;
import java.util.Objects;
import java.util.UUID;

@Entity
@Table(name = "player")
public class Player {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
    @GenericGenerator(name = "native", strategy = "native")
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @Column(name = "uuid")
    private UUID uuid;

    @OneToOne
    @JoinColumn(name = "player")
    private User user;

    @Length(max = 16)
    @Column(name = "player_name")
    private String userName;

    @Column(name = "banned")
    private boolean banned;

    @Column(name = "first_joined")
    private Timestamp firstJoined;

    @Column(name = "last_joined")
    private Timestamp lastJoined;

    @Column(name = "ip_address")
    private String ipAddress;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public UUID getUuid() {
        return uuid;
    }

    public void setUuid(UUID uuid) {
        this.uuid = uuid;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public boolean isBanned() {
        return banned;
    }

    public void setBanned(boolean banned) {
        this.banned = banned;
    }

    public Timestamp getFirstJoined() {
        return firstJoined;
    }

    public void setFirstJoined(Timestamp firstJoined) {
        this.firstJoined = firstJoined;
    }

    public Timestamp getLastJoined() {
        return lastJoined;
    }

    public void setLastJoined(Timestamp lastJoined) {
        this.lastJoined = lastJoined;
    }

    public String getIpAddress() {
        return ipAddress;
    }

    public void setIpAddress(String ipAddress) {
        this.ipAddress = ipAddress;
    }

    @Override
    public String toString() {
        return "Player{" +
                "id=" + id +
                ", uuid=" + uuid +
                ", user=" + user +
                ", userName='" + userName + '\'' +
                ", banned=" + banned +
                ", firstJoined=" + firstJoined +
                ", lastJoined=" + lastJoined +
                ", ipAddress='" + ipAddress + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Player player = (Player) o;
        return banned == player.banned &&
                Objects.equals(id, player.id) &&
                Objects.equals(uuid, player.uuid) &&
                Objects.equals(user, player.user) &&
                Objects.equals(userName, player.userName) &&
                Objects.equals(firstJoined, player.firstJoined) &&
                Objects.equals(lastJoined, player.lastJoined) &&
                Objects.equals(ipAddress, player.ipAddress);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, uuid, user, userName, banned, firstJoined, lastJoined, ipAddress);
    }
}

Użytkownik Flyway:

Create TABLE user(
    id bigint NOT NULL AUTO_INCREMENT,
    email character varying(256),
    username character varying(256),
    password character varying(256),
    reset_password boolean,
    first_name character varying(50),
    last_name character varying(50),
    gender character varying(10),
    player_id character varying(17),
    active boolean,
    roles character varying(40),
    created TIMESTAMP,
    updated TIMESTAMP,

    CONSTRAINT PK_account_account_id PRIMARY KEY (id)
);

Gracz Flyway:

CREATE TABLE player(
    id bigint NOT NULL AUTO_INCREMENT,
    uuid char(36) NOT NULL,
    player_name character varying (16),
    user_id bigint,
    banned boolean,
    first_joined timestamp,
    last_joined timestamp,
    ip_address character varying (15),

    CONSTRAINT PK_player_player_id PRIMARY KEY (id),
    CONSTRAINT FK_player_user_id_user_id FOREIGN KEY (user_id) REFERENCES user(id)

);
0
Enrico Franke 28 lipiec 2020, 00:41

1 odpowiedź

Najlepsza odpowiedź

Błąd jest dość jasny

Column "player0_.player" not found;

Tabela gracza nie ma kolumny gracza

Błąd jest tutaj:

@OneToOne
@JoinColumn(name = "player")
private User user;

Zmień na:

@OneToOne
@JoinColumn(name = "user_id")
private User user;

Jest to kolumna, przez którą nawiązuje połączenie z użytkownikiem.

W związku z zaleceniem są parametry konfiguracyjne dla wdrożenia JPA w celu zatwierdzenia poprawnego modelowania podmiotów bez potrzeby zapytań, dowiedz się, jak aktywować go z wybranym wdrożeniem.

1
JLazar0 10 sierpień 2020, 15:51