如何为给定的三个表编写hbm.xml

时间:2014-03-11 08:21:27

标签: java hibernate

这里我试图在三个表之间创建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>

我应该在上面做些什么改变。为了使其正确。

0 个答案:

没有答案