关键代码:
<!-- 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 + "]";
}
}