关键代码:
<!-- formula:派生属性,也就是子查询。里面的一对括号是必须的 --> <property name="message" type="java.lang.String" formula="(SELECT CONCAT(TITLE,':',CONTENT) FROM news n WHERE n.ID=ID)"> </property>
代码片段:
News.hbm.xml:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2016-6-25 14:50:51 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <!-- table:表名。 dynamic-update:动态更新,默认为false。执行update时生成的sql只会更改需要改的字段, 而不是全部字段一起更改 dynamic-insert:动态插入,默认为false。当插入数据时生成的insert语句,只生成不为null的数据。 --> <class name="com.shuoeasy.test.News" table="NEWS" dynamic-update="true" dynamic-insert="true"> <id name="id" type="int"> <column name="ID" /> <!-- 指定主键的生成方式, increment:先查询数据库中最大的id,然后+1写入数据库。(开发时可以这么用)。 identity:使用数据库的自增方式,例如mysql/sqlserver。 sequence:使用数据库的序列,例如oracle、db2。 hilo:采用hign/low算法,这种算法不依赖数据库,可以满足各种数据库, 会在数据库生成一个hibernate_unique_xxx表。 native:根据数据库的情况来选择用identity/sequence/hilo。可以满足各种数据库 --> <generator class="native"></generator> <!-- oracle使用序列的写法 <generator class="sequence" > <param name="sequence">my_se</param> </generator> --> </id> <!-- unique="true":唯一约束,好像mysql不起作用 update="false":字段不允许修改 index="new_index":这个字段加上索引,如果两个字段都有相同的名字就是联合索引 length="1":字段长度 scale="2":小数点位数,对double、float有效 --> <property name="title" type="java.lang.String" index="new_index" length="1" > <column name="TITLE" /> </property> <property name="content" type="java.lang.String" index="new_index"> <column name="CONTENT" /> </property> <!-- formula:派生属性,也就是子查询。里面的一对括号是必须的 --> <property name="message" type="java.lang.String" formula="(SELECT CONCAT(TITLE,':',CONTENT) FROM news n WHERE n.ID=ID)"> </property> </class> </hibernate-mapping>
News.java:
package com.shuoeasy.test; public class News { private int id; private String title; private String content; // 派生属性演示 private String message; public News(){} public News(String title, String content) { super(); this.title = title; this.content = content; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public void setMessage(String message){ this.message = message; } public String getMessage(){ return this.message; } /* 派生属性在简单情况下可以这么用:return this.title + ":" + this.content; 复杂的就在News.hbm.xml配置 public String getMessage(){ return this.title + ":" + this.content; } */ @Override public String toString() { return "News [id=" + id + ", title=" + title + ", content=" + content + ", message=" + message + "]"; } }