`
tanglei198577
  • 浏览: 61014 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

unique foreign key mapping of hibernate example

    博客分类:
  • SSH
阅读更多

First the ddl language of the table used with foreign key as :

CREATE TABLE `t_operation_log` (
  `id` BIGINT(24) NOT NULL AUTO_INCREMENT,
  `resourceId` BIGINT(24) NOT NULL,
  `systemlogId` BIGINT(24) NOT NULL,
  `operationTime` DATE DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `resourceId` (`resourceId`),
  KEY `systemlogId` (`systemlogId`),
  CONSTRAINT `t_operation_log_fk1` FOREIGN KEY (`systemlogId`) REFERENCES `t_system_log` (`id`),
  CONSTRAINT `t_operation_log_fk` FOREIGN KEY (`resourceId`) REFERENCES `t_resource` (`id`)
)ENGINE=InnoDB
AUTO_INCREMENT=4 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' 

then the xml of the mapping is:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.alba.permission.domain.Resource" table="t_resource" dynamic-insert="true" dynamic-update="true">
    	<id name="id" column="id" type="java.lang.Long">
        	<generator class="increment"/>
        </id>
		<property name="url" type="string" not-null="true" />
		<property name="resourceType" type="string" not-null="true" />

	</class>
	
	<class name="com.alba.permission.domain.OperationLog" table="t_operation_log" dynamic-insert="true" dynamic-update="true">
    	<id name="id" column="id" type="java.lang.Long">
        	<generator class="increment"/>
        </id>
        <property name="operationTime" type="java.util.Date" />      
        <many-to-one name="resource" class="com.alba.permission.domain.Resource" column="RESOURCEID" unique="true" />
        <many-to-one name="systemLog" class="com.alba.permission.domain.SystemLog" column="SYSTEMLOGID" unique="true"/>
	</class>
	
	<class name="com.alba.permission.domain.SystemLog" table="t_system_log" dynamic-insert="true" dynamic-update="true">
    	<id name="id" column="id" type="java.lang.Long">
        	<generator class="increment"/>
        </id>
		<property name="logonUserIp" type="string" not-null="true" />
		<property name="logonTime" type="java.util.Date" not-null="false" />
		<property name="logoffTime" type="java.util.Date" not-null="false" />
		<property name="logonUserId" type="java.lang.Long" not-null="true"/>
	</class>
</hibernate-mapping>

 

then test code are:

         Resource resource = new Resource();
        OperationLog operationLog = new OperationLog();
        SystemLog systemLog = new SystemLog();
		
        resource.setUrl(operationUrl);
        resource.setResourceType("Button");
        facade.getPermissionService().addOperationLog(resource);
        systemLog.setLogonUserIp(currentHostIp);
        systemLog.setLogonUserId(user.getId());
        facade.getPermissionService().addOperationLog(systemLog);
        operationLog.setOperationTime(new Date());
        operationLog.setResource(resource);
        operationLog.setSystemLog(systemLog);
        
        facade.getPermissionService().addOperationLog(operationLog);

 The problem may happend:

      1.if before add operationLog ,systemLog and resource log doesnot add,the exception will be thrown

      2.here should use many to one,not one to one mapping,remembering

     

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics