jaxb 一些体会

阅读更多
看到很多中文的技术文章介绍jaxb,但是遇到问题却都没有什么帮助.很多都是转载,举例,例子还很浅,不全面.然后呢,有问题又不知道英文怎么搜索.现在把我遇到问题总结一下,希望对其他人有帮助.
先上例子:
这是公司项目中的程序,未经许可,不得使用.
@XmlRootElement(name ="ResourceDescription")
@Entity
@Table(name = "resource_description")
public class ResourceDescription{
	
	private long id;
	
	private String resourceId;
	private String name;
	private String model;
	private Date descriptionExpirationTime;
	private String locationName;
	private String resourceType;
	private String temporalAvailability;
	private Date resourceExpirationTime;
	private double geoLongitude;
	private double geoLatitude;
	private double geoAltitude;
	private Date lastUpdatedTime;
	private Date createdTime;
	private Set outputDescriptions;
	private Set inputCommandDescriptions;
	
	@XmlElement(name = "resourceType")
	@Column(name = "resource_type")
	public String getResourceType() {
		return resourceType;
	}

	public void setResourceType(String resourceType) {
		this.resourceType = resourceType;
	}
	
	@XmlElement(name = "temporalAvailability")
	@Column(name = "temporal_availability")
	public String getTemporalAvailability() {
		return temporalAvailability;
	}

	public void setTemporalAvailability(String temporalAvailability) {
		this.temporalAvailability = temporalAvailability;
	}

	

	

	public ResourceDescription() {
		super();
	}

	public ResourceDescription(String resourceId) {
		super();
		this.resourceId = resourceId;
	}

	@XmlTransient
	@Id
	@GeneratedValue(generator="identity")
	@GenericGenerator(name="identity", strategy = "identity")
	public long getId() {
		return id;
	}
	
	public void setId(long id) {
		this.id = id;
	}

	@XmlElement(name = "resourceId")
	@Column(name = "resourceId",unique = true)
	public String getResourceId() {
		return resourceId;
	}

	public void setResourceId(String resourceId) {
		this.resourceId = resourceId;
	}

	@XmlElement(name = "name")
	@Column(name = "name")
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@XmlElement(name = "model")
	@Column(name = "model")
	public String getModel() {
		return model;
	}

	public void setModel(String model) {
		this.model = model;
	}

	@XmlElement(name = "descriptionExpirationTime")
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "description_expiration_time")
	public Date getDescriptionExpirationTime() {
		return descriptionExpirationTime;
	}

	public void setDescriptionExpirationTime(Date descriptionExpirationTime) {
		this.descriptionExpirationTime = descriptionExpirationTime;
	}

	@XmlElement(name = "resourceExpirationTime")
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "resource_expiration_time")
	public Date getResourceExpirationTime() {
		return resourceExpirationTime;
	}

	public void setResourceExpirationTime(Date resourceExpirationTime) {
		this.resourceExpirationTime = resourceExpirationTime;
	}

	@XmlElement(name = "geoLongitude")
	@Column(name = "geo_longitude")
	public double getGeoLongitude() {
		return geoLongitude;
	}

	public void setGeoLongitude(double geoLongitude) {
		this.geoLongitude = geoLongitude;
	}

	@XmlElement(name = "geoLatitude")
	@Column(name = "geo_latitude")
	public double getGeoLatitude() {
		return geoLatitude;
	}

	public void setGeoLatitude(double geoLatitude) {
		this.geoLatitude = geoLatitude;
	}

	@XmlElement(name = "geoAltitude")
	@Column(name = "geo_altitude")
	public double getGeoAltitude() {
		return geoAltitude;
	}

	public void setGeoAltitude(double geoAltitude) {
		this.geoAltitude = geoAltitude;
	}

	@XmlElement(name = "locationName")
	@Column(name = "location_name")
	public String getLocationName() {
		return locationName;
	}
	
	public void setLocationName(String locationName) {
		this.locationName = locationName;
	}
	@XmlElement(name = "createdTime")
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "created_time")
	public Date getCreatedTime() {
		return createdTime;
	}

	public void setCreatedTime(Date createdTime) {
		this.createdTime = createdTime;
	}

	@XmlElement(name = "lastUpdatedTime")
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "last_updated_time")
	public Date getLastUpdatedTime() {
		return lastUpdatedTime;
	}

	public void setLastUpdatedTime(Date lastUpdatedTime) {
		this.lastUpdatedTime = lastUpdatedTime;
	}
	@XmlElementWrapper(name="outputDescriptions")
	@XmlElement(name = "outputDescription")
	@OneToMany(cascade={CascadeType.ALL}, targetEntity=com.ericsson.m2m.resourcedirectory.persistence.entity.OutputDescription.class,mappedBy="resourceDescription")
    public Set getOutputDescriptions() {
		return this.outputDescriptions; 
	}
	
    public void setOutputDescriptions(Set outputDescriptions) {
		this.outputDescriptions = outputDescriptions; 
	}
    @XmlElementWrapper(name="inputCommandDescriptions")
    @XmlElement(name = "inputCommandDescription")	
    @OneToMany(cascade={CascadeType.ALL}, targetEntity=com.ericsson.m2m.resourcedirectory.persistence.entity.InputCommandDescription.class,mappedBy="resourceDescription")
    public Set getInputCommandDescriptions() {
		return this.inputCommandDescriptions; 
	}
	
    public void setInputCommandDescriptions(Set inputCommandDescriptions) {
		this.inputCommandDescriptions = inputCommandDescriptions; 
	}

	
}
@XmlRootElement(name ="inputCommandDescription")
@XmlType(propOrder = { "name", "parameterType", "preCondition", "postCondition" })
@Entity
@Table(name = "input_command_description")
public class InputCommandDescription {
	
	private long id;
	private String name;
	private String parameterType;
	private String preCondition;
	private String postCondition;
	private ResourceDescription resourceDescription;
	
	public InputCommandDescription() {
		super();
	}

	@XmlTransient
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public long getId() {
		return id;
	}
	
	public void setId(long id) {
		this.id = id;
	}

	@XmlElement(name = "name")
	@Column(name = "name")
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@XmlElement(name = "parameterType")
	@Column(name = "parameter_type")
	public String getParameterType() {
		return parameterType;
	}

	public void setParameterType(String parameterType) {
		this.parameterType = parameterType;
	}

	@XmlElement(name = "preCondition")
	@Column(name = "pre_condition")
	public String getPreCondition() {
		return preCondition;
	}

	public void setPreCondition(String preCondition) {
		this.preCondition = preCondition;
	}

	@XmlElement(name = "postCondition")
	@Column(name = "post_condition")
	public String getPostCondition() {
		return postCondition;
	}

	public void setPostCondition(String postCondition) {
		this.postCondition = postCondition;
	}
	@XmlTransient
	@ManyToOne(targetEntity=com.ericsson.m2m.resourcedirectory.persistence.entity.ResourceDescription.class,cascade={CascadeType.ALL})
	@JoinColumn(name="resource_description_id")	
	public ResourceDescription getResourceDescription() {
		return resourceDescription;
	}

	public void setResourceDescription(ResourceDescription resourceDescription) {
		this.resourceDescription = resourceDescription;
	}	

这个程序是hibernate和jaxb混在一起的classes定义.查出来的东东直接转xml或json输出.
下面解释一下annotation.
@XmlRootElement(name ="inputCommandDescription") 不说了
@XmlTransient 不想输出的,用它标注一下.注意,防止循环引用,onetomany一定要用,否则·····
@XmlElementWrapper(name="inputCommandDescriptions") 在list或set外面包一层,好看。
@XmlType(propOrder = { "name", "parameterType", "preCondition", "postCondition" })定义输出顺序
2011-11-11T22:22:22+08:002011-01-13T13:13:13+08:00231.012.034.03333111144442011-04-04T23:23:23+08:001113333222211112012-12-12T12:12:12+08:00111

你可能感兴趣的:(Java,XML,Hibernate,json,jaxb)