hibernate 配置文件:
<session-factory> <property name="connection.username">root</property> <property name="connection.url">jdbc:mysql://localhost:3306/s2sh_drp</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="myeclipse.connection.profile">s2sh_drp</property> <property name="connection.password">root</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.hbm2ddl.auto">update</property> <mapping class="cn.blueram.drp.model.User"/> <mapping class="cn.blueram.drp.model.Client"/> <mapping class="cn.blueram.drp.model.DataDict"/> <mapping class="cn.blueram.drp.model.ClientLevel"/> </session-factory>
实体类ClientLevel
@Entity
@DiscriminatorValue("client_level")
public class ClientLevel extends DataDict{
public ClientLevel() {
super();
}
}
实体类Client
@Entity
@Table(name="t_client")
@Proxy(lazy=true)
public class Client {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private int id;
@ManyToOne(targetEntity=cn.blueram.drp.model.Client.class)
@JoinColumn(name = "pid")
private Client pid;
@Column(name="children")
@OneToMany(mappedBy="pid" ,
targetEntity=cn.blueram.drp.model.Client.class ,
fetch=FetchType.LAZY)
private Set<Client> children;
@Column(name="name")
private String name;
@Column(name="clientId" , nullable=false)
private String clientId;
@OneToOne
@JoinColumn
private ClientLevel clientLevel;
@Column(name="bankAcctNo")
private String bankAcctNo;
@Column(name="contactTel")
private String contactTel;
@Column(name="address")
private String address;
@Column(name="zipCode")
private String zipCode;
@Column(name="isleaf")
private boolean leaf;
@Basic
@Column(name="isClient")
private boolean isClient;
数据字典实体类:DataDict
@Entity
@Table(name="t_data_dict")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="category",
discriminatorType = DiscriminatorType.STRING
)
public class DataDict implements Serializable{
public DataDict(){}
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "assigned")
private String id;
@Basic
@Column(name="name")
private String name;
遇到的问题:
mapped with insert="false" update="false"
在第一次改动中忘记把DataDict中的属性catagory去掉
但是在映射时,没有问题,太粗心了
由于遇到上面的问题在查找过程中把按照如下实现,但是还是不行
@MappedSuperclass
public abstract class AbstractEntity implements Serializable
构建抽象类,但是出现了问题,数据库多出了不需要的clientlecel表,并且client插不进去。
查找资料,去掉@MappedSuperclass,问题解决
参考:
hibernnate 官方实例