2012-05-06 2 views
0

Я новичок в hibernate, и у меня возникла проблема. Я читал все руководства для начинающих и т. Д. На веб-сайте спящего режима, и я до сих пор не могу найти решение.Нужна помощь в создании hbm.xml

У меня есть класс, как это:

public class ResultTree { 
String attrName; 
Map<String, ResultTree> valueMap; 
String classValue; 
int caseQuant; 
Set<Map<String, String>> otherRules; 

public String getAttrName() { 
    return attrName; 
} 
public void setAttrName(String attrName) { 
    this.attrName = attrName; 
} 
public Map<String, ResultTree> getValueMap() { 
    return valueMap; 
} 
public void setValueMap(Map<String, ResultTree> valueMap) { 
    this.valueMap = valueMap; 
} 
public String getClassValue() { 
    return classValue; 
} 
public void setClassValue(String classValue) { 
    this.classValue = classValue; 
} 
public int getCaseQuant() { 
    return caseQuant; 
} 
public void setCaseQuant(int caseQuant) { 
    this.caseQuant = caseQuant; 
} 
public Set<Map<String, String>> getOtherRules() { 
    return otherRules; 
} 
public void setOtherRules(Set<Map<String, String>> otherRules) { 
    this.otherRules = otherRules; 
} 

}

Как должен hbm.xml для класса, как это смотреть? Я свободен для создания любой структуры данных.

Спасибо за помощь, MM

+0

Зачем вам нужен Set > .. вы можете добиться этого просто Map .. есть ли какое-то конкретное требование? – PVR

+0

Вам нужно будет упростить свою модель, чтобы привести ее в соответствие с реляционной моделью. Как уже говорила Ранна, использование этой карты внутри набора действительно не является чем-то, что вы сопоставляете с реляционной БД. Даже если вы узнаете, как его отобразить, это будет огромная боль. –

+0

@Ranna Этот класс моделирует дерево решений с присоединением нескольких путей, если найденное нераспознанное значение установлено, Set > - это в основном набор наборов, содержащих пары <Атрибут, Значение>. В основном это список требований. – kemaleq

ответ

1

С помощью решения RANNA, я сумел смоделировать класс, разделив его на два отдельных класса:

public class ResultTree { 
private Long id; 
private String attrName; 
private Map<String, ResultTree> valueMap; 
private String classValue; 
private int caseQuant; 
private Set<Rule> otherRules; 
} 

и

public class Rule { 
private Long id; 
private Map<String, String> terms; 
private ResultTree tree; 
private String classValue; 
} 

hbm.xml имеет следующий вид:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="lib.experiment.result"> 
    <class name="ResultTree" table="RESULT_TREE"> 
     <id name="id" column="RESULT_TREE_ID" type="long" /> 
     <property name="attrName" type="string" column="ATTR_NAME" /> 
     <property name="classValue" type="string" column="CLASS_VALUE" /> 
     <property name="caseQuant" type="int" column="CASE_QUANT" /> 
     <map name="valueMap" table="RESULT_TREE_LEAF" lazy="false"> 
      <key column="RESULT_TREE_ID"/> 
      <map-key column="ATTR_VALUE" type="string"/> 
      <many-to-many class="ResultTree" /> 
     </map> 
     <set name="otherRules" table="RULE" lazy="false"> 
      <key column="RESULT_TREE_ID"/> 
      <one-to-many class="Rule"/> 
     </set> 
    </class> 
    </hibernate-mapping> 

и

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="lib.experiment.result"> 
    <class name="Rule" table="RULE"> 
     <id name="id" column="RULE_ID" type="long" /> 
     <property name="classValue" column="CLASS" type="string" /> 
     <map name="terms" table="RULE_TERM" lazy="false"> 
      <key column="RULE_ID"/> 
      <map-key column="ATTR_NAME" type="string"/> 
      <element column="ATTR_VALUE" type="string"/> 
     </map> 
     <many-to-one name="tree" class="ResultTree" lazy="false"> 
      <column name="RESULT_TREE_ID"/> 
     </many-to-one> 
    </class> 
    </hibernate-mapping> 

Большое спасибо за помощь!

0

Надеется, что это поможет вам.

<?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.ResultTree" table="result_treeid"> 
<meta attribute="class-description">This class contains student details.</meta> 
<id name="id" type="long" column="id"> 
<generator class="native" /> 
</id> 
<property name="attrName" type="string" length="100" not-null="true" column="attr_name" /> 
<property name="classValue" type="string" length="100" not-null="true" column="class_value" /> 
<property name="caseQuant" type="bigint" not-null="true" column="case_quant" /> 
<map role="valueMap" table="value_map"> 
    <key column="id"/> 
    <map-key column="keyname" type="string"/> 
    <element column="valuename" type="ResultTree"/> 
</map> 
<map role="otherRules" table="other_rules"> 
    <key column="id"/> 
    <map-key column="keyname" type="string"/> 
    <element column="valuename" type="string"/> 
</map> 
</class> 
</hibernate-mapping> 
Смежные вопросы