<xs:complexType name="actions_type">
生成类名为ActionsType.java
若改成 <xs:complexType name="actions_type">则生成类名为Actionstype.java
所以——符号是用来作用类名中大小写的。
在hibernate-mapping.dtd转换成java类 全过程及解决办法:
1、cmd后xjc -dtd hibernate-mapping.dtd 
出现的现象为:
parsing a schema...
[ERROR] Property "Subselect" is already defined.
line 275 of file:/D:/hibernate-mapping-3.0.dtd
[ERROR] The following location is relevant to the above error
line 268 of file:/D:/hibernate-mapping-3.0.dtd
[ERROR] Property "Column" is already defined.
line 795 of file:/D:/hibernate-mapping-3.0.dtd
[ERROR] The following location is relevant to the above error
line 794 of file:/D:/hibernate-mapping-3.0.dtd


......................................................................
经查明:元素和属性 有共同的名称(如Column)故在产生的java类(get,set方法) 会产生冲突。
解决思路,
1、更改元素或属性的名称,使其不一致。但在java类转化xml文件时 不能体现原来的dtd文件原意了。舍弃。
2、通过在java类中生成标注区别。但dtd文件没有提供这样的解决办法,舍弃。
3、将dtd通过spyxml转换成xsd文件
3.1、cmd,D:>xjc hibernate-mapping.xsd -p com.hibernatemapping.test 
3.2、出现类似dtd文件转换过程的一样的问题,属性已经存在的问题。
3.2.1 对转化后的xsd文件内容修改:
将xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" >
修改为
xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="http://www.w3.org/1998/Math/MathML" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0">

同时对冲突的所有属性做修改,如
<xs:element ref="column" minOccurs="0"/>
改为:
<xs:element ref="column" minOccurs="0">
<xs:annotation><xs:appinfo>
<jaxb:property name="column-element" /> <!--自定义-->
</xs:appinfo></xs:annotation>
</xs:element>
当然也可以对属性做出修改的
<xs:attribute name="class" type="xs:NMTOKENS">
<xs:annotation><xs:appinfo>
<jaxb:property name="clazz" />
</xs:appinfo></xs:annotation>
</xs:attribute>
在重新cmd 后即可成功。几个月前,做项目的时候用到Map,在一篇文章中,我记得说过Map的回收有问题,一试,果然,当设置为null时,还是不能有效进行回收,找了些资料,最后发现了WeakHashMap,当没有指针指向value时,key会被回收,就用它做了个CacheMap,需要多加一个方法
package org.ofbiz.payment.common;
import java.util.Iterator;
import java.util.WeakHashMap;
/**
* @author zxub 2006-3-22 10:03:22
*/
public class CacheMap extends WeakHashMap
{
public Object getKeyByValue(Object value)
{
Object returnValue = null;
Object key = null;
for (Iterator iter = this.keySet().iterator(); iter.hasNext();)
{
key = iter.next();
if (this.get(key).equals(value))
{
returnValue = key;
break;
}
}
return returnValue;
}
}
这里的应用刚好与Map相反了,经测试,能有效释放内存。 import java.util.Iterator;
import java.util.WeakHashMap;
/**
* @author zxub 2006-3-22 10:03:22
*/
public class CacheMap extends WeakHashMap
{
public Object getKeyByValue(Object value)
{
Object returnValue = null;
Object key = null;
for (Iterator iter = this.keySet().iterator(); iter.hasNext();)
{
key = iter.next();
if (this.get(key).equals(value))
{
returnValue = key;
break;
}
}
return returnValue;
}
}
本文解决了Hibernate映射文件从DTD转换为Java类时出现的属性重复错误,并介绍了如何通过修改DTD文件为XSD文件来解决此问题。此外,还分享了一种使用WeakHashMap实现缓存映射的方法,以有效管理内存资源。

被折叠的 条评论
为什么被折叠?



