Hibernate не создает таблицу в оракуле БД

1

У меня есть приложение mvc Spring, интегрированное с спящим режимом. У меня есть 3 pojo, которые помечены для создания таблицы спящего режима.

  • Book.java с @Table (name = "BOOKS").
  • User.java с @Table (name = "USER_TABLE")
  • Role.java с @Table (name = "ROLE_TABLE")

Я настроил сессионную фабрику и все.

Мой hibernate.hbm2ddl.auto = create-drop. Но и попробовал create, update.

Когда я запускаю свое приложение, таблица BOOKS создается в БД. но USER_TABLE и ROLE_TABLE не создаются.

Я не получаю исключения.

Когда я select * from USER_TABLE; вывод таблицы или представления не существует.

package com.ca.service.form;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

/**
* @author jamju02
*/
@Entity
@Table(name = "ROLE_TABLE")
public class Role {
    private long id;
    private String roleName;

    private Set<User> users = new HashSet<User>();

    /**
     * @return the id
     */
     @Id
     @GeneratedValue
     @Column(name = "ROLE_ID")
    public long getId() {
        return id;
    }
    /**
     * @param id the id to set
     */
    public void setId(long id) {
        this.id = id;
    }
    /**
     * @return the roleName
     */
    public String getRoleName() {
        return roleName;
    }
    /**
     * @param roleName the roleName to set
     */
    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }
    /**
     * @return the users
     */
     @ManyToMany(cascade = CascadeType.ALL)
     @JoinTable(
            name = "USERS_ROLES_TABLE",
            joinColumns = @JoinColumn(name = "ROLE_ID"),
            inverseJoinColumns = @JoinColumn(name = "USER_ID")
     )
    public Set<User> getUsers() {
        return users;
    }
    /**
     * @param users the users to set
     */
    public void setUsers(Set<User> users) {
        this.users = users;
    }
}

package com.ca.service.form;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

/**
* @author jamju02
*/
@Entity
@Table(name = "USER_TABLE")
public class User {
    private long id;
    private String username;
    private String password;
    private String email;

    private Set<Role> roles = new HashSet<Role>();

    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    // public void addRole(Role role) {
    // this.roles.add(role);
    // }

    /**
     * @return the id
     */
    @Id
    @GeneratedValue
    @Column(name = "USER_ID")
    public long getId() {
        return id;
    }

    /**
     * @param id
     *            the id to set
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * @return the username
     */
    public String getUsername() {
        return username;
    }

    /**
     * @param username
     *            the username to set
     */
    public void setUsername(String username) {
        this.username = username;
    }

    /**
     * @return the password
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password
     *            the password to set
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email
     *            the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

     /**
     * @return the roles
     */
     @ManyToMany(mappedBy = "users")
     public Set<Role> getRoles() {
         return roles;
     }

     /**
     * @param roles the roles to set
     */
     public void setRoles(Set<Role> roles) {
         this.roles = roles;
     }
}


package com.ca.service.form;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "BOOKS")
public class Book {

    @Id
    @Column(name="ID")
    @GeneratedValue
    private Integer id;

    @Column(name="BOOK_NAME")
    private String bookName;

    @Column(name="AUTHOR")
    private String author;

    @Column(name="PRICE")
    private int price;

    @Column(name="QTY")
    private int quantity;

    public Integer getId() 
    {return id;}

    public String getBookName() 
    {return bookName;}

    public String getAuthor() 
    {return author;}

    public int getPrice() 
    {return price;}

    public int getQuantity() 
    {return quantity;}

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

    public void setBookName(String bookName) 
    {this.bookName = bookName;}

    public void setAuthor(String author) 
    {this.author = author;}

    public void setPrice(int price) 
    {this.price = price;}

    public void setQuantity(int quantity) 
    {this.quantity = quantity;}
}
  • 0
    Смотрите эту ссылку: stackoverflow.com/questions/438146/…
  • 0
    @Sanket: Моя проблема в том, что из 3 таблиц, которые я хочу создать, создается только таблица книг, где не создаются USER_TABLE и ROLE_TABLE. Я перепробовал все возможные значения для hibernate.hbm2ddl.auto.
Показать ещё 2 комментария
Теги:
spring
hibernate

1 ответ

-1

Есть несколько причин, потому что ваш код не сработает.

  1. Вы добавили файл класса ROLE_TABLE, USER_TABLE в SessionFactory?
  2. Поместите свои аннотации должным образом.

    @Entity
    @Table(name = "ROLE_TABLE")
    public class Role {
    private long id;
    private String roleName;
    
    private Set<User> users = new HashSet<User>();
    
    /**
    * @return the id
    */
    @Id
    @GeneratedValue
    @Column(name = "ROLE_ID")
    public long getId() {
        return id;
    }
    

Замените это следующим образом:

@Entity
@Table(name = "ROLE_TABLE")
public class Role {
 @Id @GeneratedValue
 @Column(name = "ROLE_ID")
 private long id;
 private String roleName;

 private Set<User> users = new HashSet<User>();

 /**
  * @return the id
  */

 public long getId() {
   return id;
 }

Перед объявлением переменной необходимо разместить аннотации спящего режима. Я вставлял свой код в свое приложение с моими изменениями, и это сработало.

  • 0
    Вы видели, как OP добавил аннотации к методам? Не обязательно добавлять аннотации, если поля и столбцы БД имеют одинаковые имена.
  • 0
    Все классы pojo помещаются в фабрику сессий. Размещение аннотации может быть в объявлении переменной или в методе получения.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню