一对一Mapspring boot

jtw3ybtb  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(459)

大家好,我有一个问题,我的一对一连接,当我试图登录到“用户”我得到这个错误
我需要的是一个一对一的连接,它不必是持久的,这意味着用户可以拥有一个播放器,但不必拥有它,反之亦然
因为在我的例子中,minecraft服务器应该填充player表,而网站填充用户以便他们可以连接。

  1. 2020-07-27 23:06:12,537 DEBUG [http-nio-8080-exec-2] nirvanacw.de.demo.user.UserServiceImpl: --> getUserByEmail email=Test@gmx.de
  2. 2020-07-27 23:06:12,550 WARN [http-nio-8080-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: SQL Error: 42122, SQLState: 42S22
  3. 2020-07-27 23:06:12,550 ERROR [http-nio-8080-exec-2] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Feld "player0_.player" nicht gefunden
  4. Column "player0_.player" not found; SQL statement:
  5. 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]
  6. 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
  7. 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

用户实体:

  1. package nirvanacw.de.demo.user;
  2. import nirvanacw.de.demo.player.Player;
  3. import org.hibernate.annotations.GenericGenerator;
  4. import javax.persistence.*;
  5. import javax.validation.constraints.Email;
  6. import java.time.ZonedDateTime;
  7. import java.util.Objects;
  8. @Entity
  9. @Table(name = "user")
  10. public class User {
  11. @Id
  12. @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
  13. @GenericGenerator(name = "native", strategy = "native")
  14. @Column(name = "id", updatable = false, nullable = false)
  15. private Long id;
  16. @Email
  17. @Column(name = "email")
  18. private String email;
  19. @Column(name ="username")
  20. private String username;
  21. @Column(name ="password")
  22. private String password;
  23. @Column(name ="first_name")
  24. private String firstName;
  25. @Column(name ="last_name")
  26. private String lastName;
  27. @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
  28. private Player player;
  29. @Column(name ="reset_password")
  30. private boolean resetPassword;
  31. @Column(name ="roles")
  32. private String roles;
  33. @Column(name ="active")
  34. private boolean active;
  35. @Column(name = "created")
  36. private ZonedDateTime created;
  37. @Column(name = "updated")
  38. private ZonedDateTime updated;
  39. public Long getId() {
  40. return id;
  41. }
  42. public void setId(Long id) {
  43. this.id = id;
  44. }
  45. public String getEmail() {
  46. return email;
  47. }
  48. public void setEmail(String email) {
  49. this.email = email;
  50. }
  51. public String getUsername() {
  52. return username;
  53. }
  54. public void setUsername(String username) {
  55. this.username = username;
  56. }
  57. public String getFirstName() {
  58. return firstName;
  59. }
  60. public void setFirstName(String firstName) {
  61. this.firstName = firstName;
  62. }
  63. public String getLastName() {
  64. return lastName;
  65. }
  66. public void setLastName(String lastName) {
  67. this.lastName = lastName;
  68. }
  69. public boolean isResetPassword() {
  70. return resetPassword;
  71. }
  72. public void setResetPassword(boolean resetPassword) {
  73. this.resetPassword = resetPassword;
  74. }
  75. public String getPassword() {
  76. return password;
  77. }
  78. public void setPassword(String password) {
  79. this.password = password;
  80. }
  81. public String getRoles() {
  82. return roles;
  83. }
  84. public void setRoles(String roles) {
  85. this.roles = roles;
  86. }
  87. public boolean getActive() {
  88. return active;
  89. }
  90. public void setActive(boolean active) {
  91. this.active = active;
  92. }
  93. public Player getPlayer() {
  94. return player;
  95. }
  96. public void setPlayer(Player player) {
  97. this.player = player;
  98. }
  99. @PrePersist
  100. public void onPrePersist() {
  101. this.created = ZonedDateTime.now();
  102. }
  103. @PreUpdate
  104. public void onPreUpdate() {
  105. this.updated = ZonedDateTime.now();
  106. }
  107. @Override
  108. public String toString() {
  109. return "User{" +
  110. "id=" + id +
  111. ", email='" + email + '\'' +
  112. ", username='" + username + '\'' +
  113. ", firstName='" + firstName + '\'' +
  114. ", lastName='" + lastName + '\'' +
  115. ", player=" + player +
  116. ", resetPassword=" + resetPassword +
  117. ", roles='" + roles + '\'' +
  118. ", active=" + active +
  119. ", created=" + created +
  120. ", updated=" + updated +
  121. '}';
  122. }
  123. @Override
  124. public boolean equals(Object o) {
  125. if (this == o) return true;
  126. if (o == null || getClass() != o.getClass()) return false;
  127. User user = (User) o;
  128. return resetPassword == user.resetPassword &&
  129. active == user.active &&
  130. Objects.equals(id, user.id) &&
  131. Objects.equals(email, user.email) &&
  132. Objects.equals(username, user.username) &&
  133. Objects.equals(password, user.password) &&
  134. Objects.equals(firstName, user.firstName) &&
  135. Objects.equals(lastName, user.lastName) &&
  136. Objects.equals(player, user.player) &&
  137. Objects.equals(roles, user.roles) &&
  138. Objects.equals(created, user.created) &&
  139. Objects.equals(updated, user.updated);
  140. }
  141. @Override
  142. public int hashCode() {
  143. return Objects.hash(id, email, username, password, firstName, lastName, player, resetPassword, roles, active, created, updated);
  144. }
  145. }

玩家实体:

  1. import java.sql.Timestamp;
  2. import java.util.Objects;
  3. import java.util.UUID;
  4. @Entity
  5. @Table(name = "player")
  6. public class Player {
  7. @Id
  8. @GeneratedValue(strategy = GenerationType.AUTO, generator = "native")
  9. @GenericGenerator(name = "native", strategy = "native")
  10. @Column(name = "id", updatable = false, nullable = false)
  11. private Long id;
  12. @Column(name = "uuid")
  13. private UUID uuid;
  14. @OneToOne
  15. @JoinColumn(name = "player")
  16. private User user;
  17. @Length(max = 16)
  18. @Column(name = "player_name")
  19. private String userName;
  20. @Column(name = "banned")
  21. private boolean banned;
  22. @Column(name = "first_joined")
  23. private Timestamp firstJoined;
  24. @Column(name = "last_joined")
  25. private Timestamp lastJoined;
  26. @Column(name = "ip_address")
  27. private String ipAddress;
  28. public Long getId() {
  29. return id;
  30. }
  31. public void setId(Long id) {
  32. this.id = id;
  33. }
  34. public UUID getUuid() {
  35. return uuid;
  36. }
  37. public void setUuid(UUID uuid) {
  38. this.uuid = uuid;
  39. }
  40. public User getUser() {
  41. return user;
  42. }
  43. public void setUser(User user) {
  44. this.user = user;
  45. }
  46. public String getUserName() {
  47. return userName;
  48. }
  49. public void setUserName(String userName) {
  50. this.userName = userName;
  51. }
  52. public boolean isBanned() {
  53. return banned;
  54. }
  55. public void setBanned(boolean banned) {
  56. this.banned = banned;
  57. }
  58. public Timestamp getFirstJoined() {
  59. return firstJoined;
  60. }
  61. public void setFirstJoined(Timestamp firstJoined) {
  62. this.firstJoined = firstJoined;
  63. }
  64. public Timestamp getLastJoined() {
  65. return lastJoined;
  66. }
  67. public void setLastJoined(Timestamp lastJoined) {
  68. this.lastJoined = lastJoined;
  69. }
  70. public String getIpAddress() {
  71. return ipAddress;
  72. }
  73. public void setIpAddress(String ipAddress) {
  74. this.ipAddress = ipAddress;
  75. }
  76. @Override
  77. public String toString() {
  78. return "Player{" +
  79. "id=" + id +
  80. ", uuid=" + uuid +
  81. ", user=" + user +
  82. ", userName='" + userName + '\'' +
  83. ", banned=" + banned +
  84. ", firstJoined=" + firstJoined +
  85. ", lastJoined=" + lastJoined +
  86. ", ipAddress='" + ipAddress + '\'' +
  87. '}';
  88. }
  89. @Override
  90. public boolean equals(Object o) {
  91. if (this == o) return true;
  92. if (o == null || getClass() != o.getClass()) return false;
  93. Player player = (Player) o;
  94. return banned == player.banned &&
  95. Objects.equals(id, player.id) &&
  96. Objects.equals(uuid, player.uuid) &&
  97. Objects.equals(user, player.user) &&
  98. Objects.equals(userName, player.userName) &&
  99. Objects.equals(firstJoined, player.firstJoined) &&
  100. Objects.equals(lastJoined, player.lastJoined) &&
  101. Objects.equals(ipAddress, player.ipAddress);
  102. }
  103. @Override
  104. public int hashCode() {
  105. return Objects.hash(id, uuid, user, userName, banned, firstJoined, lastJoined, ipAddress);
  106. }
  107. }

flyway用户:

  1. Create TABLE user(
  2. id bigint NOT NULL AUTO_INCREMENT,
  3. email character varying(256),
  4. username character varying(256),
  5. password character varying(256),
  6. reset_password boolean,
  7. first_name character varying(50),
  8. last_name character varying(50),
  9. gender character varying(10),
  10. player_id character varying(17),
  11. active boolean,
  12. roles character varying(40),
  13. created TIMESTAMP,
  14. updated TIMESTAMP,
  15. CONSTRAINT PK_account_account_id PRIMARY KEY (id)
  16. );

玩家飞行路线:

  1. CREATE TABLE player(
  2. id bigint NOT NULL AUTO_INCREMENT,
  3. uuid char(36) NOT NULL,
  4. player_name character varying (16),
  5. user_id bigint,
  6. banned boolean,
  7. first_joined timestamp,
  8. last_joined timestamp,
  9. ip_address character varying (15),
  10. CONSTRAINT PK_player_player_id PRIMARY KEY (id),
  11. CONSTRAINT FK_player_user_id_user_id FOREIGN KEY (user_id) REFERENCES user(id)
  12. );
bjp0bcyl

bjp0bcyl1#

这个错误很明显

  1. Column "player0_.player" not found;

player表没有player列
错误如下:

  1. @OneToOne
  2. @JoinColumn(name = "player")
  3. private User user;

更改为:

  1. @OneToOne
  2. @JoinColumn(name = "user_id")
  3. private User user;

它是与用户建立连接的列。
建议使用jpa实现的配置参数来验证实体的正确建模,而不需要查询,了解如何使用您选择的实现激活它。

展开查看全部

相关问题