Классы ORM Spring Boot Hibernate не связываются с таблицами mysql - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь связать классы Spring Boot Model с таблицами MySQL. Но при связывании классов модели Spring возникает исключение. Пожалуйста, посмотрите на мой код. Во-первых, ниже находится файл application.properties:

application.properties

spring.thymeleaf.cache = false
spring.thymeleaf.prefix = classpath:/templates
server.port = 8090

spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost/test?characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = password

######################################################
##### Configure Hibernate DDL mode: create / update
spring.jpa.properties.hibernate.hbm2ddl.auto = update
spring.jpa.properties.hibernate.show_sql = true

######################################################
##### Spring Security Queries for AuthenticationManagerBuilder
spring.queries.users-query = SELECT username, password, active FROM user_table WHERE username=?
spring.queries.roles-query = SELECT ut.username, rt.role FROM user_table ut inner join user_role ur on(ut.user_id=ur.user_id) inner join role_table rt on(ur.role_id=rt.role_id) WHERE ut.username=?

Класс пользователя

@Data
@Entity
@Table(name="USER_TABLE")
public class User {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="USER_ID", nullable = false, unique = true)
    private Long id;

    @Column(name="EMAIL", unique=true, nullable=false)
    @Email
    @NotEmpty(message="**Type your email")
    private String email;

    @Column(name="PASSWORD", nullable=false)
    @Length(min=5, message="**minimum 5 characters")
    @NotEmpty(message="**type password")
    @JsonIgnore
    private String password;

    @Column(name="USERNAME", unique=true, nullable=false)
    @Length(min=3, message="**minimum 3 characters")
    @NotEmpty(message="**type your username")
    private String username;

    @Column(name="NAME")
    @NotEmpty(message="**type your name")
    private String name;

    @Column(name="LAST_NAME")
    @NotEmpty(message="**type your last name")
    private String lastName;

    @Column(name="ACTIVE", nullable=false)
    private int active;

    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name="USER_ROLE", joinColumns=@JoinColumn(name="USER_ID"), inverseJoinColumns=@JoinColumn(name="ROLE_ID"))
    private Collection<Role> roles;

    @OneToMany(mappedBy="user")
    private Collection<Post> posts;
}

Почтовый класс

@Data
@Entity
@Table(name="POST")
public class Post {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="POST_ID")
    private Long id;

    @Column(name="TITLE", nullable=false)
    @Length(min=5, message="**minimum 5 characters")
    @NotEmpty(message="**type your title")
    private String title;

    @Column(name="BODY", columnDefinition="TEXT")
    private String body;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="CREATION_DATE", nullable=false, updatable=false)
    @CreationTimestamp
    private Date createDate;

    @ManyToOne
    @JoinColumn(name="USER_ID", referencedColumnName="USER_ID", nullable=false)
    @NotNull
    private User user;

    @OneToMany(mappedBy="post", cascade=CascadeType.REMOVE)
    private Collection<Comment> comments;
}

Класс роли

@Data
@Entity
@Table(name="ROLE_TABLE")
public class Role {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="role_id")
    private Long id;

    @Column(name="role", unique=true)
    private String role;

    @ManyToMany(cascade=CascadeType.ALL, mappedBy="roles")
    private Collection<User> users;
}

Однако метод post.setUser вообще не работает и выдает проводные сообщения об ошибках. Ниже приведен метод контроллера, который содержит метод post.setUser.

@Controller
public class PostController {

    @Autowired
    private PostService postService;

    @Autowired
    private UserService userService;

    @RequestMapping(value="/newPost", method=RequestMethod.GET)
    public String newPost(Principal principal, Model model) {

        User user = userService.findByUsername(principal.getName());

        if(user != null) {
            Post post = new Post();
            post.setUser(user);  // throws Exceptions.

            model.addAttribute("post", post);
            return "/postForm";
        } else {
            return "/error";
        }

    }

    @RequestMapping(value="/newPost", method=RequestMethod.POST)
    public String createNewPost(@Valid Post post, BindingResult bindingResult) {

        if(bindingResult.hasErrors()) {
            return "/postForm";
        } else {
            postService.save(post);
            return "redirect:/blog/" + post.getUser().getUsername();
        }
    }

Исключения

at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:473) ~[na:na]
at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:510) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at java.base/java.lang.String.valueOf(String.java:2951) ~[na:na]
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168) ~[na:na]
at com.aaa.spring.blog.model.Role.toString(Role.java:16) ~[classes/:na]
at java.base/java.lang.String.valueOf(String.java:2951) ~[na:na]
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168) ~[na:na]
at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:473) ~[na:na]
at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:510) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at java.base/java.lang.String.valueOf(String.java:2951) ~[na:na]
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168) ~[na:na]
at com.aaa.spring.blog.model.User.toString(User.java:25) ~[classes/:na]
at java.base/java.lang.String.valueOf(String.java:2951) ~[na:na]
at java.base/java.lang.StringBuilder.append(StringBuilder.java:168) ~[na:na]
at java.base/java.util.AbstractCollection.toString(AbstractCollection.java:473) ~[na:na]
at org.hibernate.collection.internal.PersistentBag.toString(PersistentBag.java:510) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
at java.base/java.lang.String.valueOf(String.java:2951) ~[na:na]

Я скачал этот код по этой ссылке . Но я боюсь, что этот код имеет некоторые ошибки. Я пытаюсь найти ошибки, но не могу найти ошибки для изменения.

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