我有一张表primary_details
,其中包含以下字段
uid
--->主键和自动递增&独特的
name
age
我有另一张表cust_info
,其中包含以下字段
uid
---> primary_details
表格中的主键外键&不是唯一的
score
comments
现在的问题是,当我在primary_details
表中插入一行时,它会自动在uid
列中插入值,并在所有后续新行上自动递增,这是完美的。但是现在我希望uid
表中的cust_info
具有与uid
表中相同的primary_details
值,当我在primary_details
中写一行时表
例如:
如果我插入以下行,则在primary_details
表中
uid name age
1 Mark 25
现在如果我在上面的一个表中插入一个记录,它也应该得到uid
1
我正在使用Java来编写表格。在java中我可以轻松生成uid
并将其插入表中但我想在MySQL中使用唯一ID和自动增量功能
答案 0 :(得分:2)
在父表cust_info
中插入行。
然后,使用您想要的方法检索生成的uid:How to get the insert ID in JDBC?
使用以前生成的uid在子表import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass
import org.codehaus.groovy.grails.commons.DomainClassArtefactHandler
import org.codehaus.groovy.grails.orm.hibernate.persister.entity.GroovyAwareSingleTableEntityPersister as GASTEP
import org.hibernate.SessionFactory
//Include script dependencies required for task dependencies
includeTargets << grailsScript("Bootstrap")
target(grailsDomianMappings: "List down field details for all grails domain classes") {
//Task dependencies required for initialization of app. eg: initialization of sessionFactory bean
depends(compile, bootstrap)
System.out.println("Running script...")
//Fetch session factory from application context
SessionFactory sessionFactory = appCtx.getBean("sessionFactory")
//Fetch all domain classes
def domains = grailsApp.getArtefacts(DomainClassArtefactHandler.TYPE)
GASTEP persister
List<String> propertyMappings = []
Map<String, List<String>> mappings = [:]
//Iterate over domain classes
for (DefaultGrailsDomainClass domainClass in domains) {
//Get class meta data
persister = sessionFactory.getClassMetadata(domainClass.clazz) as GASTEP
propertyMappings = []
//fetch table name mapping
String mappedTable = persister.tableName
//fetch all properties for domain
String[] propertyNames = persister.propertyNames
propertyNames += persister.identifierPropertyName
//fetch column name mappings for properties
propertyNames.each {
propertyMappings += persister.getPropertyColumnNames(it).first()
}
mappings.put(mappedTable, propertyMappings)
}
//Print data
mappings.each { String table, List<String> properties ->
properties.each { String property ->
System.out.println("${table}.${property}")
}
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++")
}
}
setDefaultTarget(grailsDomianMappings)
中插入。
在旁注中,您的子表应该有自己的uid和外键的不同字段。
示例:
<强>客户强>
uid ---&gt;主键自动递增
命名
年龄
<强>为CustomerDetails 强>
uid ---&gt;主键自动递增
CUSTOMER_ID ---&GT;客户表上的外键
得分
评论