让Hibernate生成的DDL脚本自动增加注释(二)
TERN = "/**/*.class";
private static final String PACKAGE_INFO_SUFFIX = ".package-info";
private static final TypeFilter[] ENTITY_TYPE_FILTERS = new TypeFilter[] {
new AnnotationTypeFilter(Entity.class, false),
new AnnotationTypeFilter(Embeddable.class, false),
new AnnotationTypeFilter(MappedSuperclass.class, false) };
private final ResourcePatternResolver resourcePatternResolver;
public SchemaExportTool() {
this.resourcePatternResolver = ResourcePatternUtils
.getResourcePatternResolver(new PathMatchingResourcePatternResolver());
}
public static void main(String[] args) {
try {
Properties p = new Properties();
p.setProperty("hibernate.dialect",
"org.hibernate.dialect.MySQLDialect");
SchemaExportTool cfg = new SchemaExportTool();
cfg.addProperties(p);
cfg.setNamingStrategy(new ImprovedMyNamingStrategy());
cfg.scanPackage("com.share.passport.domain",
"com.share.authority.domain", "com.share.utils.domain");
SchemaExport se = new SchemaExport(cfg);
if (null != args && args.length > 1)
if ("-f".equals(args[0]))
se.setOutputFile(args[1]);
else
se.setOutputFile("create_table.sql");
else
se.setOutputFile("create_table.sql");
se.setDelimiter(";");
// se.drop(false, false);
se.create(false, false);
} catch (Exception e) {
e.printStackTrace();
}
private SchemaExportTool scanPackage(String... packagesToScan) {
try {
for (String pkg : packagesToScan) {
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX
+ ClassUtils.convertClassNameToResourcePath(pkg)
+ RESOURCE_PATTERN;
Resource[] resources = this.resourcePatternResolver
.getResources(pattern);
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(
this.resourcePatternResolver);
for (Resource resource : resources) {
if (resource.isReadable()) {
MetadataReader reader = readerFactory
.getMetadataReader(resource);
String className = reader.getClassMetadata()
.getClassName();
if (matchesEntityTypeFilter(reader, readerFactory)) {
addAnnotatedClass(this.resourcePatternResolver
.getClassLoader().loadClass(className));
} else if (className.endsWith(PACKAGE_INFO_SUFFIX)) {
addPackage(className.substring(
0,
className.length()
- PACKAGE_INFO_SUFFIX.length()));
}
}
}
}
return this;
} catch (IOException ex) {
throw new MappingException(
"Failed to scan classpath for unlisted classes", ex);
} catch (ClassNotFoundException ex) {