Hibernate 与oracle的数据库映射问题

小耗子 2010-09-17 03:10:18
今天做了一个简单的登录,使用的是orcale数据库,SSH2框架搭建的,然后使用MyEclipse工具自动生成po类,发现比用mysql数据库的时候多出了两张表,不知道这两张表是怎么生成的,可以给我讲讲吗?



听说人家公司里不用自动生成这些东西的,都自己手动写,要是自己手动写,怎么写呢?

小弟是初学者,大家帮帮忙
...全文
261 1 收藏 21
写回复
21 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zn85600301 2010-09-17
这个可能性很大 主键一般是必须要指定的 否则这个表。。。
回复
小耗子 2010-09-17
[Quote=引用 19 楼 icqsky 的回复:]

你把这些类等等全部删掉,然后把username设为主键,然后重新映射.........里面有个 Create abstract class,把这个选择前面的√去掉.......
[/Quote]
没有了呀,是不是orcale数据库表创建的时候必须要指定主键呀,不然系统会自动给他设一个id主键?
回复
icqsky 2010-09-17
你把这些类等等全部删掉,然后把username设为主键,然后重新映射.........里面有个 Create abstract class,把这个选择前面的√去掉.......
回复
小耗子 2010-09-17
我也很纳闷呀,不知道这个iD哪里来的
回复
zn85600301 2010-09-17
额 你这个关系怎么乱了
test 中 有一个testId对象属性··
回复
zn85600301 2010-09-17
额 是不是就是因为你没有设置主键?
你的Test.java 是什么样的?
回复
小耗子 2010-09-17
testID.java 的内容是:


/**
* TestId entity. @author MyEclipse Persistence Tools
*/

public class TestId implements java.io.Serializable {

// Fields

private String username;
private String password;

// Constructors

/** default constructor */
public TestId() {
}

/** full constructor */
public TestId(String username, String password) {
this.username = username;
this.password = password;
}

// Property accessors

public String getUsername() {
return this.username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return this.password;
}

public void setPassword(String password) {
this.password = password;
}

public boolean equals(Object other) {
if ((this == other))
return true;
if ((other == null))
return false;
if (!(other instanceof TestId))
return false;
TestId castOther = (TestId) other;

return ((this.getUsername() == castOther.getUsername()) || (this
.getUsername() != null
&& castOther.getUsername() != null && this.getUsername()
.equals(castOther.getUsername())))
&& ((this.getPassword() == castOther.getPassword()) || (this
.getPassword() != null
&& castOther.getPassword() != null && this
.getPassword().equals(castOther.getPassword())));
}

public int hashCode() {
int result = 17;

result = 37 * result
+ (getUsername() == null ? 0 : this.getUsername().hashCode());
result = 37 * result
+ (getPassword() == null ? 0 : this.getPassword().hashCode());
return result;
}

}



username和password都跑到这个里面去了
回复
小耗子 2010-09-17
怎么设置呀,都不知道的哦,感觉自己学的好少哦
回复
icqsky 2010-09-17
[Quote=引用 11 楼 wuhao1014yi 的回复:]
如果是这样的话我在jsp页面中调用EL表达式的时候,只能用your name is ${user.id.username}

而不能用your name is ${user.username}了,用了就报错
[/Quote]

{user.username}和{user.id.username}写法可以在struts.xml里面设置的!
回复
小耗子 2010-09-17
test.java 的内容是:

/**
* Test entity. @author MyEclipse Persistence Tools
*/

public class Test implements java.io.Serializable {

// Fields

private TestId id;

// Constructors

/** default constructor */
public Test() {
}

/** full constructor */
public Test(TestId id) {
this.id = id;
}

// Property accessors

public TestId getId() {
return this.id;
}

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

}
回复
小耗子 2010-09-17
如果是这样的话我在jsp页面中调用EL表达式的时候,只能用your name is ${user.id.username}

而不能用your name is ${user.username}了,用了就报错
回复
小耗子 2010-09-17
[Quote=引用 9 楼 icqsky 的回复:]

你在映射的时候,里面有个 Create abstract class,把这个选择前面的√去掉
[/Quote]

我已近去了呀。是不是orcale数据库的问题呢。我在数据库表中只有两个字段,username和password。没有设置id的什么任何主键
回复
icqsky 2010-09-17
你在映射的时候,里面有个 Create abstract class,把这个选择前面的√去掉
回复
icqsky 2010-09-17
LZ是否把id和userid设成联合组键了?
回复
zn85600301 2010-09-17
生成的时候会有一些选项 也许你多选了
从未发现过多的
你可以看下多的里面是些什么信息
回复
小耗子 2010-09-17
我没有设置主键呀
回复
小耗子 2010-09-17
那为什么还要生成TestId.java这张表呢
回复
zn85600301 2010-09-17
如果你是联合主键是会多一个主键类的
生成的和手写的差不多 不嫌麻烦就自己写
回复
小耗子 2010-09-17
错了,test.java是错的,我自己添加了username和password的两个变量属性
回复
e9876 2010-09-17
哪两张?
Abstract的那两张?
这个在生成时有选择的
Create Abstract Class
不要选这项就可以了。

自己手动写也没什么的,你看看自动生成是怎样的然后照着写就是了
回复
加载更多回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-09-17 03:10
社区公告
暂无公告