因此,经过10年多的休整,我将回到Java并尝试使用JPA和Java泛型.我已经创建了一个基于泛型的findAll(other)JPA查询
SELECT * FROM source WHERE other_id = other.id;
Run Code Online (Sandbox Code Playgroud)
这是我要去的地方.它有效,但我想知道是否有更好,更清洁的方法来做到这一点.使用ManagedType很难,并没有太多完整的文档或简单的例子.
我决定尽可能保持我的代码通用(没有双关语),所以我使用JPA2.
这是所有实体类的根.我可能不需要它,但它阻止我有基本的错误.
import java.io.Serializable;
public abstract class DomainObject implements Serializable {
private static final long serialVersionUID = 1L;
public abstract void setId(Long id);
public abstract Long getId();
}
Run Code Online (Sandbox Code Playgroud)
这是抽象的DAO类.我为实现类扩展了这个,因为我需要更具体地做其他活动 - 主要是确保加载延迟集.
public abstract class GenericDAOImpl<T extends DomainObject, T2 extends DomainObject> implements GenericDAO<T, T2> {
private Class<T> type;
@PersistenceContext
protected EntityManager entityManager;
public GenericDAOImpl(Class<T> type) {
super();
this.type = type;
}
... save and delete classes go …Run Code Online (Sandbox Code Playgroud) 以下是使用SCORM for imsmanifest,xml文件的测试用例.这个XML已经使用了大约5年或更长时间,并且作为标准我不想改变它,除非需要让它工作.
你可以在这里找到xsd文件
错误发生在<organizations default="CYBER4.ORG">和之间<organization identifier="CYBER4.ORG">
在我的项目中,这是pom.xml我的jaxb版本的条目
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.2.11</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
生成我运行的Java代码(这是xjcUbuntu 14.04 的安装)
$ xjc -version
xjc 2.2.4-2
$ xjc -verbose -p org.cyber4.scorm2004.xml.manifest.imscp imscp_v1p2.xsd
Run Code Online (Sandbox Code Playgroud)
输出生成(除其他外)
public class OrganizationsType {
@XmlAttribute(name = "default")
@XmlIDREF
@XmlSchemaType(name = "IDREF")
protected Object _default;
}
Run Code Online (Sandbox Code Playgroud)
和
public class OrganizationType {
@XmlAttribute(name = "identifier", required = true)
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@XmlSchemaType(name = "ID")
protected String identifier;
}
Run Code Online (Sandbox Code Playgroud)
这是测试代码
package org.cyber4.scorm2004.build;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import …Run Code Online (Sandbox Code Playgroud)