如题,我想保存数据时使用HashMap来代替Pojo,这样可以降低逻辑层和持久层的耦合度,请问可以吗?

解决方案 »

  1.   

    理论上应该可以吧!只要在Map里面放置的东西对应数据库。我们的扩展字段就是这么做的。
      

  2.   

    <dynamic-component name="extFields">
    <property name="ext1" column="ext1" type="string"
    length="5" />
    </dynamic-component>以上是映射文件的扩展字段,但是映射文件要有ID标签啊。
      

  3.   

    extFields是一个Map,作扩展用!里面有属性,就是要扩展的属性,对应于数据库新增的字段。
      

  4.   

    public class StockAccount implements Serializable { private static final long serialVersionUID = -5499999237945435542L; private long businessid;
    private String accountName; // 账户名字
    private long credit; // 账户金额
    private String stockName; // 股票名字
    private long stockCount; // 股票数量 /** 扩展属性信息 */
    private Map<String, Object> extFields = new HashMap<String, Object>(); public Object getExtField(String name) {
    synchronized (this) {
    if (extFields == null) {
    extFields = new HashMap<String, Object>();
    return null;
    }
    }
    return this.extFields.get(name);
    } public void setExtField(String name, Object value) {
    synchronized (this) {
    if (extFields == null) {
    extFields = new HashMap<String, Object>();
    }
    }
    this.extFields.put(name, value);
    } public long getBusinessid() {
    return businessid;
    } public void setBusinessid(long businessid) {
    this.businessid = businessid;
    } public String getAccountName() {
    return accountName;
    } public void setAccountName(String accountName) {
    this.accountName = accountName;
    } public long getCredit() {
    return credit;
    } public void setCredit(long credit) {
    this.credit = credit;
    } public String getStockName() {
    return stockName;
    } public void setStockName(String stockName) {
    this.stockName = stockName;
    } public long getStockCount() {
    return stockCount;
    } public void setStockCount(long stockCount) {
    this.stockCount = stockCount;
    } public Map<String, Object> getExtFields() {
    return extFields;
    } public void setExtFields(Map<String, Object> extFields) {
    this.extFields = extFields;
    }}<?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    <class name="com.infotech.stock.common.db.CStockAccount"
    table="StockAccount" dynamic-insert="true" dynamic-update="true">
    <id name="businessid" type="long">
    <column name="Businessid" />
    <generator class="native">
    <param name="sequence">STOCKACCOUNT_BUSINESSID</param>
    </generator>
    </id> <property name="accountName" type="string">
    <column name="AccountName" length="16" />
    </property> <property name="stockName" type="string">
    <column name="StockName" length="16" />
    </property> <property name="credit" type="long">
    <column name="Credit" />
    </property> <property name="stockCount" type="long">
    <column name="StockCount" />
    </property> <!-- 扩展字段 -->
    <dynamic-component name="extFields">
    <property name="ext1" column="ext1" type="string"
    length="5" />
    </dynamic-component>
    </class>
    </hibernate-mapping>
      

  5.   

    楼上的这位大哥,我刚没注意看你的代码,现在我仔细看了一下,发现你的这个不是我想要的啊。
    我想把你的StockAccount类都省了,直接用HashMap替代。
    你的测试代码大概如下:    StockAccount sa = new StockAccount();
        sa.setBusinessid("001");
        sa.set.....
        session.save(sa);我想要的是:    Map sa = new HashMap();
        sa.put("businessid","001");
        sa.put....
        session.save(sa);
      

  6.   

    为什么不用set或者list呢,我知道这两个是可以的,不知道你用map到底有什么目的