如何使用反射来基于JPA注释记录数据模型
生活随笔
收集整理的這篇文章主要介紹了
如何使用反射来基于JPA注释记录数据模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
因此,當您僅可以注釋Java類時,使用JPA,Hibernate或EBeans會很酷,但是您不是一直希望可以從代碼“生成”數據模型的文檔嗎? 提取JPA / Hibernate和其他驗證批注的信息?
假設您的bean中包含所有這些漂亮的注釋:
這是如何完成該任務的示例:
public static String listEntities(String _package) {StringBuffer retval = new StringBuffer();Reflections reflections = new Reflections(_package, Play.application().classloader());Set<Class<?>> classes = reflections.getTypesAnnotatedWith(javax.persistence.Entity.class);for (Class c : classes) {retval.append(c.getName() + "\n");retval.append(listAnnotations(c.getName()) + "\n\n");retval.append(listAttributes(c.getName()) + "\n\n");}return retval.toString();}public static String listAnnotations(String _class) {StringBuffer retval = new StringBuffer();try {Annotation[] annotations = Class.forName(_class).getAnnotations();if (annotations.length != 0) {for (int j = 0; j < annotations.length; j++) {retval.append(annotations[j].toString() + ": " + annotations[j].annotationType() + "\n");}retval.append("\n");}} catch (ClassNotFoundException e) {System.out.println(e.toString());return retval.toString();}return retval.toString();}public static String listAttributes(String _class) {StringBuffer retval2 = new StringBuffer();boolean perstistent = false;try {for (Field field : Class.forName(_class).getDeclaredFields()) {Class type = field.getType();String name = field.getName();perstistent = false;StringBuffer retval = new StringBuffer();retval.append("\t" + name + " (" + type + ")\n");Annotation[] annotations = field.getDeclaredAnnotations();if (annotations.length != 0) {for (int j = 0; j < annotations.length; j++) {retval.append(annotations[j].toString() + ": " + annotations[j].annotationType() + "\n");if (annotations[j].toString().startsWith("@javax.persistence")) {perstistent = true;}}retval.append("\n");}if (perstistent) {retval2.append(retval);}}} catch (ClassNotFoundException e) {System.out.println(e.toString());return retval2.toString();}return retval2.toString();}這將生成如下內容:
models.controlling.Bill @javax.persistence.Table(schema=, uniqueConstraints=[], catalog=, name=project_bills): interface javax.persistence.Table @javax.persistence.Entity(name=): interface javax.persistence.Entityid (class java.lang.Long) @javax.persistence.Id(): interface javax.persistence.Id @javax.persistence.Column(insertable=true, scale=0, unique=false, precision=0, columnDefinition=, name=PBI_ID, updatable=true, length=255, nullable=true, table=): interface javax.persistence.ColumnbillAmount (class java.lang.Double) @utils.data.formatters.Formats$DoubleFormat(): interface utils.data.formatters.Formats$DoubleFormat @javax.persistence.Column(insertable=true, scale=0, unique=false, precision=0, columnDefinition=, name=PBI_BILL_AMOUNT, updatable=true, length=22, nullable=true, table=): interface javax.persistence.ColumnbillDate (class java.util.Date) @javax.persistence.Column(insertable=true, scale=0, unique=false, precision=0, columnDefinition=, name=PBI_BILL_DATE, updatable=true, length=255, nullable=true, table=): interface javax.persistence.Column @play.data.format.Formats$DateTime(pattern=dd.MM.yyyy): interface play.data.format.Formats$DateTimebillNumber (class java.lang.String) @javax.persistence.Column(insertable=true, scale=0, unique=false, precision=0, columnDefinition=, name=PBI_BILL_NUMBER, updatable=true, length=10, nullable=true, table=): interface javax.persistence.Column 當然,這只是冰山一角,但是您明白了。
翻譯自: https://www.javacodegeeks.com/2013/07/how-to-use-reflection-to-document-your-data-model-based-on-jpa-annotations.html
總結
以上是生活随笔為你收集整理的如何使用反射来基于JPA注释记录数据模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中古店什么意思 中古店含义
- 下一篇: 腾讯微云的默认下载路径