jfinal 连接oracle 数据库把外键当成主键 在mappingkit文件里生成多个主键解决办法

Posted sysogg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jfinal 连接oracle 数据库把外键当成主键 在mappingkit文件里生成多个主键解决办法相关的知识,希望对你有一定的参考价值。

1 听波总说是ojdbc  这个jar包版本问题 我以前用的ojdbc14 我换成6了之后 还是存在这个问题 所以我重写了jfinal源码里面的方法 也就是第二种方法

 

2  下面是我重写的类

package com.syhz.model;

import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.generator.MetaBuilder;
import com.jfinal.plugin.activerecord.generator.TableMeta;
/**
* 重写jfinal生成主键规则
* @author String
*
*/
public class MyMetaBuilder extends MetaBuilder{

public MyMetaBuilder(DataSource dataSource) {
super(dataSource);
// TODO Auto-generated constructor stub
}

@Override
public void buildPrimaryKey(TableMeta tableMeta) throws SQLException{

ResultSet rs = dbMeta.getPrimaryKeys(conn.getCatalog(), null, tableMeta.name);

String primaryKey = "";
int index = 0;
while (rs.next()) {
/*if (index++ > 0) {
primaryKey += ",";
}*/
primaryKey = rs.getString("COLUMN_NAME");
}
if (StrKit.isBlank(primaryKey)) {
throw new RuntimeException("primaryKey of table \\"" + tableMeta.name + "\\" required by active record pattern");
}
tableMeta.primaryKey = primaryKey;
rs.close();


}
}

 

 

使用的话是在 2      generator.setMetaBuilder(new MyMetaBuilder(dataSource2));  用自己重写的MyMetaBuilder 

 

 

 

之所以标记1  2 是要先用1来获取   因为按照常理来说 自己都会单独写一个连接数据库的方法  如果用自己写的方法 在这里直接用的话 会报错 说 数据已经连接  也就是重复连接的意思  所以我是这么做的 

以上是关于jfinal 连接oracle 数据库把外键当成主键 在mappingkit文件里生成多个主键解决办法的主要内容,如果未能解决你的问题,请参考以下文章

批量执行语句之——禁用所有表的外键

oracle中 主键和外键是啥意思?啥地方采用呢?

oracle中 主键和外键是啥意思?啥地方采用呢?

oracle中 主键和外键是啥意思?啥地方采用呢?

oracle 如何创建表外键

oracle建立 主键 和 外键 的问题