Mar*_*man 5 java xsd jaxb hyperjaxb
我有一个看起来像的模式片段
<xs:element name="dataValue">
<xs:complexType>
<xs:sequence>
<xs:element name="value" type="xs:anyType"\>
</xs:sequence>
</xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)
hyperjaxb3生成的类包含以下片段:
@XmlElement(required = true)
protected Object value;
@Transient
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
@Basic
@Column(name = "VALUEOBJECT")
public String getValueObject() {
if (JAXBContextUtils.
isMarshallable("org.lcogt.schema", this.getValue())) {
return JAXBContextUtils.unmarshall("org.lcogt.schema", this.getValue());
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,hibernate将很难持久化纯对象,因此hyperjaxb假设该对象可以被解组为XML字符串并且生成的String是持久的.在我的情况下,这不是真的,但我可以保证toString()方法将返回一些有用的东西.我希望生成的代码看起来更像:
@XmlElement(required = true)
protected Object value;
@Transient
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
@Basic
@Column(name = "VALUEOBJECT")
public String getValueObject() {
return value.toString();
}
Run Code Online (Sandbox Code Playgroud)
无论如何我可以得到这种效果或类似的东西?
谢谢,
标记.
问题是这种转换必须是双向的:您还必须能够从字符串“解析”回您的对象 - 否则您将无法取回您的对象。这toString()
还不够(但这是一个完美的起点)。
我认为可以通过自定义适配器来解决。即,您为此属性编写并配置自己的适配器。适配器将适合您的toString()
类型fromString(...)
。
这里有一个问题:
http://jira.highsource.org/browse/HJIII-54