这里我试图在三个表之间创建hibernet映射。
atom
存储用户唯一名称和id,post_messages存储消息
likes
是一个存储用户(atom)消息的表。
One user(atom) can like multiple messages.
and multiple user(atom) can like a single message.
one user can like a particular message once
只要用户(原子)点击消息按钮(在jsp页面上),就会存储like表中的数据
我的表结构如下所示
原子
CREATE TABLE `atom` (
`id` int(100) NOT NULL AUTO_INCREMENT,
`name` varchar(200),
`type` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
unique KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
喜欢
CREATE TABLE likes (
messageid bigint(200) NOT NULL,
aid int(100) NOT NULL,
adddate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (messageid,aid),
CONSTRAINT messageid FOREIGN KEY (messageid) REFERENCES post_messages(messageid) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `aid` FOREIGN KEY (aid) REFERENCES atom (id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
post_messages
CREATE TABLE `post_messages` (
`messageid` bigint(200) NOT NULL AUTO_INCREMENT,
`message` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`messageid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我想为上表
创建类和hbm.xml文件为了解决上述问题,我根据下表创建了类
原子
public class Atom implements java.io.Serializable {
private Integer id;
private String name;
private String type;
private Set postMessages=new Hashset(0);
//getter setter and constructor of above
}
PostMessages
public class PostMessages implements java.io.Serializable {
private Long messageid;
private String message;
private Set likes = new HashSet(0);
//getter setter and constructor of above
}
喜欢
public class Likes implements java.io.Serializable {
private Long messageid;
private Integer aid;
private Atom atom;
private PostMessages postMessages;
private Date adddate;
//getter setter and constructor of above
}
Hibernate映射文件
Atom.hbm.xml
<hibernate-mapping>
<class name="hibernetMappings.Atom" table="atom" catalog="xrcwrn_sms">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="200" unique="true" />
</property>
<property name="type" type="string">
<column name="type" length="100" not-null="true" />
</property>
<set name="likes" table="likes" inverse="true" lazy="true" fetch="select">
<key>
<column name="aid" not-null="true" />
</key>
<one-to-many class="hibernetMappings.Likes" />
</set>
</hibernate-mapping>
PostMessages.hbm.xml
<hibernate-mapping>
<class name="hibernetMappings.PostMessages" table="post_messages" catalog="xrcwrn_sms">
<id name="messageid" type="java.lang.Long">
<column name="messageid" />
<generator class="identity" />
</id>
<property name="message" type="string">
<column name="message" length="1000" />
</property>
<property name="visibility" type="string">
<column name="visibility" length="100" />
</property>
<property name="totalLikes" type="java.lang.Long">
<column name="total_likes" />
</property>
<set name="likes" table="likes" inverse="true" lazy="true" fetch="select">
<key>
<column name="messageid" not-null="true" />
</key>
<one-to-many class="hibernetMappings.Likes" />
</set>
</hibernate-mapping>
Likes.hbm.xml
<hibernate-mapping>
<class name="hibernetMappings.Likes" table="likes" catalog="xrcwrn_sms">
<composite-id name="id" class="hibernetMappings.Likes">
<key-property name="messageid" type="long">
<column name="messageid" />
</key-property>
<key-property name="aid" type="int">
<column name="aid" />
</key-property>
</composite-id>
<many-to-one name="atom" class="hibernetMappings.Atom" update="false" insert="false" fetch="select">
<column name="aid" not-null="true" />
</many-to-one>
<many-to-one name="postMessages" class="hibernetMappings.PostMessages" update="false" insert="false" fetch="select">
<column name="messageid" not-null="true" />
</many-to-one>
<property name="adddate" type="timestamp">
<column name="adddate" length="19" not-null="true" />
</property>
</hibernate-mapping>
我应该在上面做些什么改变。为了使其正确。