먼저 내가이 사이트를 처음 사용한다고 말하면서 시작하겠습니다.이 항목의 형식을 잘못 지정했다면 지적 해주세요.
어쨌든 나는 springboot, spring security 및 hibernate를 사용하여 로그인 등록 응용 프로그램을 만들려고합니다. 실행할 때 위의 오류가 계속 발생합니다. 아래에 몇 가지 코드를 게시 할 것입니다.
내 학생 수업 :
@Entity
public class Student implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long studentId;
@OneToOne(targetEntity = Role.class, fetch = FetchType.EAGER)
@JoinColumn(name = "role_id")
private Role role;
private String fullName;
private Age age;
private String gender;
private String email;
private String username;
private String password;
private String college;
private String field;
private String major;
private String prevExperience;
private String educationLevel;
private String currentlyPursuing;
private String currentCountry;
private String currentCity;
private String profileTheme;
private String careerSpecialty;
@Lob
private byte[] bytes;
private int credits = 0;
private String bio;
private boolean enabled;
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public Long getStudentId() {
return studentId;
}
public void setStudentId(Long studentId) {
this.studentId = studentId;
}
public int getCredits() {
return credits;
}
public void setCredits(int credits) {
this.credits = credits;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public byte[] getBytes() {
return bytes;
}
public void setBytes(byte[] bytes) {
this.bytes = bytes;
}
public String getBio() {
return bio;
}
public void setBio(String bio) {
this.bio = bio;
}
public String getCareerSpecialty() {
return careerSpecialty;
}
public void setCareerSpecialty(String careerSpecialty) {
this.careerSpecialty = careerSpecialty;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public Age getAge() {
return age;
}
public void setAge(Age age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return enabled;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority(role.getName()));
return authorities;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCollege() {
return college;
}
public void setCollege(String college) {
this.college = college;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public String getPrevExperience() {
return prevExperience;
}
public void setPrevExperience(String prevExperience) {
this.prevExperience = prevExperience;
}
public String getEducationLevel() {
return educationLevel;
}
public void setEducationLevel(String educationLevel) {
this.educationLevel = educationLevel;
}
public String getCurrentlyPursuing() {
return currentlyPursuing;
}
public void setCurrentlyPursuing(String currentlyPursuing) {
this.currentlyPursuing = currentlyPursuing;
}
public String getCurrentCountry() {
return currentCountry;
}
public void setCurrentCountry(String currentCountry) {
this.currentCountry = currentCountry;
}
public String getCurrentCity() {
return currentCity;
}
public void setCurrentCity(String currentCity) {
this.currentCity = currentCity;
}
public String getProfileTheme() {
return profileTheme;
}
public void setProfileTheme(String profileTheme) {
this.profileTheme = profileTheme;
}
@Override
public String toString() {
return "Student{" +
"studentId=" + studentId +
", fullName='" + fullName + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", college='" + college + '\'' +
", field='" + field + '\'' +
", prevExperience='" + prevExperience + '\'' +
", educationLevel='" + educationLevel + '\'' +
", currentlyPursuing='" + currentlyPursuing + '\'' +
'}';
}
}
내 역할 엔터티는 다음과 같습니다.
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long role_id;
private String name;
public Long getId() {
return role_id;
}
public void setId(Long id) {
this.role_id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
내 사용자 dao와 구현은 다음과 같습니다.
사용자 Dao :
public interface UserDao {
Student findByUsername(String username);
}
User Dao 구현 :
@Repository
public class UserDaoImpl implements UserDao {
@Override
public Student findByUsername(String username) {
Session session = SessionFactoryCreator.createSessionFactory().openSession();
Query query = session.createQuery("from User where username = :username ");
query.setParameter("username", username);
Student Student = (Student) query.getSingleResult();
session.close();
return Student;
}
}
다음은 내 보안 구성 파일입니다.
보안 구성 :
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService);
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/assets/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().hasRole("USER")
.and()
.formLogin()
.loginPage("/sign-up")
.permitAll()
.successHandler(loginSuccessHandler())
.failureHandler(loginFailureHandler())
.and()
.logout()
.permitAll()
.logoutSuccessUrl("users/details-page");
}
public AuthenticationSuccessHandler loginSuccessHandler() {
return (req, res, authentication) -> res.sendRedirect("/");
}
public AuthenticationFailureHandler loginFailureHandler() {
return (req, res, exception) -> {
req.getSession().setAttribute("flash", new FlashMessage("Incorrect username and/or password. Please try again", FlashMessage.Status.FAILURE));
res.sendRedirect("/sign-up");
};
}
}
마지막으로 오류 로그 :
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: com.arkan.nextstep.web.Role, at table: user, for columns: [org.hibernate.mapping.Column(role)]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE]
at com.arkan.nextstep.Main.main(Main.java:11) [main/:na]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: com.arkan.nextstep.web.Role, at table: user, for columns: [org.hibernate.mapping.Column(role)]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not determine type for: com.arkan.nextstep.web.Role, at table: user, for columns: [org.hibernate.mapping.Column(role)]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:403) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]
... 16 common frames omitted
Caused by: org.hibernate.MappingException: Could not determine type for: com.arkan.nextstep.web.Role, at table: user, for columns: [org.hibernate.mapping.Column(role)]
Caused by: org.hibernate.MappingException: Could not determine type for: com.arkan.nextstep.web.Role, at table: user, for columns: [org.hibernate.mapping.Column(role)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:488) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:455) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
at org.hibernate.mapping.Property.isValid(Property.java:227) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:624) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
at org.hibernate.mapping.RootClass.validate(RootClass.java:267) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:343) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:461) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1237) ~[hibernate-core-5.4.9.Final.jar:5.4.9.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) ~[spring-orm-5.2.2.RELEASE.jar:5.2.2.RELEASE]
... 20 common frames omitted
어떤 도움이라도 대단히 감사하겠습니다!