hibernate annotation 实现数据字典表

 

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,问题解决

 

参考:

http://www.oracle.com/technology/global/cn/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#MappedSuperclass

hibernnate 官方实例

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值