2014-11-05 75 views
1

我有一个与hibernate集成的spring mvc应用程序。 我有3个标记为hibernate表格创建的pojo。休眠不创建oracle中的表db

  • Book.java with @Table(name =“BOOKS”)。
  • User.java与@Table(NAME = “USER_TABLE”)
  • Role.java与@Table(NAME = “ROLE_TABLE”)

我已经配置会话工厂和所有。我的hibernate.hbm2ddl.auto = create-drop。但也试过create, update

当我开始我的应用程序BOOKS表正在DB中创建。但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

请参阅此链接:http://stackoverflow.com/questions/438146/hibernate-hbm2ddl-auto-possible-values-and-what-they-do – DeepInJava 2014-11-05 13:01:48

+0

@Sanket:我的问题是,出3张表我哪只想创建书本表正在创建,其中USER_TABLE和ROLE_TABLE未创建。我已经尝试了hibernate.hbm2ddl.auto的所有可能的值。 – user1834664 2014-11-05 13:10:14

+0

显示由hibernate生成的完整日志,我猜hibernate在创建表本身时有问题,所以表创建失败。 – Chaitanya 2014-11-05 13:21:06

回答

0

有一些原因,因为你的代码会失败。

  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在方法上添加了注释?如果字段和数据库列名称相同,则不一定要添加注释。 – OO7 2014-11-05 13:16:12

+0

所有pojo类放置在会话工厂。 注释的放置可以在变量声明或getter方法上。 – user1834664 2014-11-05 13:18:27

+0

在他/她的代码中有getter方法的注释..列和字段的名称也是不同的.. – user3880352 2014-11-05 13:19:26