Channel表
Channel.java
作为子表
/**
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "top_id", referencedColumnName = "id") })
@XmlTransient
Channel channel;//restrict,外键关联了本表的主键。当子表存在是,主表的相关字段不能做任何操作。
/**
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "create_user", referencedColumnName = "username") })
@XmlTransient
User user;//cascade
/**
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "resource_id", referencedColumnName = "id") })
@XmlTransient
Resource resource;//cascade
/**
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "site_id", referencedColumnName = "siteurl", nullable = false) })
@XmlTransient
Site site;//cascade
相对应的restrict的channel表在下方,作为主表的时候。
cascade时呢。
作为User的channel
@OneToMany(mappedBy = "user", cascade = { CascadeType.REMOVE }, fetch=FetchType.EAGER)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Channel> channels;
作为Resource的channel
@OneToMany(mappedBy = "resource", cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)更新时set null
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Channel> channels;
作为site的channel
@OneToMany(mappedBy = "site", cascade = { CascadeType.REMOVE }, fetch = FetchType.EAGER)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Channel> channels;
作为主表
/**
*/
@OneToMany(mappedBy = "channel", cascade = { CascadeType.REMOVE }, fetch = FetchType.EAGER)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Channel> channels;
---------------------------------------------------------------------------------------------------
这是多对多的一个代表
Channel.java
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
catalog = "gvsuncms", name = "inter_tag_channel",
joinColumns = { @JoinColumn(name = "channel_id", referencedColumnName = "id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "tag_id", referencedColumnName = "id", nullable = false, updatable = false) })
@XmlElement(name = "", namespace = "")java.util.Set<net.gvsuncms.domain.Tag> tags;
Tag.java
@ManyToMany(mappedBy = "tags", fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Channel> channels;
------------------------------------------------------------------------------------------------------------
site表
Site.java
作为子表
/**
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "site_url", referencedColumnName = "siteurl", nullable = true) })//自己既是主键,也是外键。即有父site,有子site。子site中的某个字段拥有父site的所有属性。
@XmlTransient
Site site;
/**
*/@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "template_id", referencedColumnName = "id", nullable = false) })
@XmlTransient
Template template;
/**
*/
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({ @JoinColumn(name = "image_attachment", referencedColumnName = "id") })
@XmlTransient
Resource resource;//这里是cascade。
site/template/resource
@OneToMany(mappedBy = "template", cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Site> sites;
@OneToMany(mappedBy = "resource", cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Site> sites;
作为主表
/**
*/
@OneToMany(mappedBy = "site", cascade = { CascadeType.REMOVE }, fetch = FetchType.EAGER)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Site> sites;
还有一个多对多
Site.java
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
catalog = "gvsuncms", name = "inter_type_site", //这是多对多的表名。
joinColumns = { @JoinColumn(name = "siteurl", referencedColumnName = "siteurl", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "type_id", referencedColumnName = "id", nullable = false, updatable = false) })
@XmlElement(name = "", namespace = "")java.util.Set<net.gvsuncms.domain.Type> types;
Type.java
无
template和type无外键
Template.java
作为主表,因为没有外键,故没有作为子表的时候。
/**
*/
@OneToMany(mappedBy = "template", cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Site> sites;//一个template对应多个site,说明site中有个template类。
多对多
/***/
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
catalog = "gvsuncms", name = "template_type",
joinColumns = { @JoinColumn(name = "template_id", referencedColumnName = "id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "type_id", referencedColumnName = "id", nullable = false, updatable = false) })//这说明是restrict
@XmlElement(name = "", namespace = "")java.util.Set<net.gvsuncms.domain.Type> types;
Type.java
/**
*/
@ManyToMany(mappedBy = "types", fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
java.util.Set<net.gvsuncms.domain.Template> templates;
扎心了,好像没什么规律,先mark一下吧。
2018/03/30更新
/**
*/
@OneToMany(mappedBy = "topCategory", cascade = { CascadeType.REMOVE }, fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
java.util.Set<hq.domain.Category2> category2s;
/**
*/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "top_category", referencedColumnName = "name") })
@XmlTransient
Category topCategory;
就是映射的topCategory,原来映射的属性名,我一直以为是表字段……