hibernate创建表:ORA-00903: 表名无效

「已注销」
博客专家认证
2016-09-21 07:22:11
我在web项目中写持久层的时候遇到以下问题:
我想写一个用户留言板的项目,用的框架是struts+hibernate。web层已经搭建好了,现在是持久层的搭建。在我的登录模块中,有两张表。User表和Message表。他们的关系如下:



public class Message implements Serializable {

private static final long serialVersionUID = 1L;
private Integer msgId;
private Date msgTime;
private String content;
private User sender;
private User getter;

public Integer getMsgId() {
return msgId;
}
public void setMsgId(Integer msgId) {
this.msgId = msgId;
}
public Date getMsgTime() {
return msgTime;
}
public void setMsgTime(Date msgTime) {
this.msgTime = msgTime;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public User getSender() {
return sender;
}
public void setSender(User sender) {
this.sender = sender;
}
public User getGetter() {
return getter;
}
public void setGetter(User getter) {
this.getter = getter;
}

}




public class User implements Serializable {

private static final long serialVersionUID = 1L;

private Integer userId;
private String userpwd;
private String name;
//这里一个用户可以发送多个消息,也可以接收多个消息. one-to-many
private Set<Message> sendMessages;
private Set<Message> getMessages;

public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Message> getSendMessages() {
return sendMessages;
}
public void setSendMessages(Set<Message> sendMessages) {
this.sendMessages = sendMessages;
}
public Set<Message> getGetMessages() {
return getMessages;
}
public void setGetMessages(Set<Message> getMessages) {
this.getMessages = getMessages;
}
}

其中user表和message表是:一对多的关系,主要通过user表的sendMessages和getMessaggs,外键指向Message来建立两者的关系。
他们的映射文件如下:



<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.shizongger.domain">
<class lazy="true" name="User" table="user">
<id name="userId" type="java.lang.Integer">
<generator class="sequence">
<param name="sequence">user_seq</param>
</generator>
</id>
<property name="userpwd" type="java.lang.String">
<column name="userpwd" length="32" />
</property>
<property name="name" type="java.lang.String">
<column name="name" length="32" />
</property>
<!-- 配置one2many -->
<set name="sendMessages">
<key column="senderId"/>
<one-to-many class="com.shizongger.domain.Message"/>
</set>
<set name="getMessages">
<key column="getterId"/>
<one-to-many class="com.shizongger.domain.Message"/>
</set>
</class>
</hibernate-mapping>




<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.shizongger.domain">
<class lazy="true" name="Message" table="message">
<!-- 配置主键增长策略 -->
<id name="msgId" type="java.lang.Integer">
<generator class="sequence">
<param name="sequence">msg_seq</param>
</generator>
</id>
<!-- 配置普通属性 -->
<property name="msgTime" type="java.util.Date">
<column name="msgTime" />
</property>
<property name="content" type="java.lang.String">
<column name="content" length="256"/>
</property>
<!-- 配置多对一关系 -->
<many-to-one name="sender" column="senderId" />
<many-to-one name="getter" column="getterId" />
</class>
</hibernate-mapping>


我的main方法只是创建了一个session而已,没有任何逻辑操作,控制台输出如下:



2223 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - updating schema
27247 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - table found: SCOTT.MESSAGE
27247 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - columns: [senderid, content, msgid, getterid, msgtime]
27247 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - foreign keys: []
27247 [main] INFO org.hibernate.tool.hbm2ddl.TableMetadata - indexes: [sys_c0012468]
27257 [main] INFO org.hibernate.tool.hbm2ddl.DatabaseMetadata - table not found: user
27268 [main] INFO org.hibernate.tool.hbm2ddl.DatabaseMetadata - table not found: user
27278 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - Unsuccessful: create table user (userId number(10,0) not null, userpwd varchar2(32), name varchar2(32), primary key (userId))
27278 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - ORA-00903: 表名无效

27281 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - Unsuccessful: alter table message add constraint FK38EB0007A2F25B6 foreign key (senderId) references user
27281 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - ORA-00903: 表名无效

27284 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - Unsuccessful: alter table message add constraint FK38EB000736BF970C foreign key (getterId) references user
27284 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - ORA-00903: 表名无效

27284 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - schema update complete

其中,msg_seq和user_seq这两个序列的创建史正确的,Message表创建也是正确的。就是没有User表的出现。
...全文
396 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-09-22
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
hbm2ddl.auto设为create
可以,我试试。
「已注销」 2016-09-22
  • 打赏
  • 举报
回复
引用 4 楼 wlwlwlwl015 的回复:
table not found: user 你数据库中的表名是user吗?或者说你数据库名配错了~那个数据库中没有这张表
我不是先创建表,而是通过hibernate的映射表让它自动创建的。
「已注销」 2016-09-22
  • 打赏
  • 举报
回复
引用 2 楼 qnmdcsdn 的回复:
什么数据库,user是关键字吧
Orcle 11g。
小灯光环 2016-09-22
  • 打赏
  • 举报
回复
table not found: user 你数据库中的表名是user吗?或者说你数据库名配错了~那个数据库中没有这张表
  • 打赏
  • 举报
回复
hbm2ddl.auto设为create
  • 打赏
  • 举报
回复
什么数据库,user是关键字吧
「已注销」 2016-09-21
  • 打赏
  • 举报
回复
发帖子的时候,格式弄错了,楼下的将就着看吧。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧