Java 使用反射从POJO获取id列名
如何使用反射从POJO中获取主键列名,该POJO由Java 使用反射从POJO获取id列名,java,jpa,reflection,annotations,Java,Jpa,Reflection,Annotations,如何使用反射从POJO中获取主键列名,该POJO由javax.persistence.Id注释定义?我必须找到@Id,然后获取@Column注释的name属性。。。我不知道该怎么做 谢谢 这是全靠自己的解决方案: @Entity @Table(name="MY_TABLE") public class MyTable{ @Id @Column(name="MY_TABLE_ID") @GeneratedValue(strategy = GenerationType.
javax.persistence.Id
注释定义?我必须找到@Id
,然后获取@Column
注释的name
属性。。。我不知道该怎么做
谢谢 这是全靠自己的解决方案:
@Entity
@Table(name="MY_TABLE")
public class MyTable{
@Id
@Column(name="MY_TABLE_ID")
@GeneratedValue(strategy = GenerationType.AUTO ,generator="SQ_MY_TABLE")
@SequenceGenerator(name="SQ_MY_TABLE", sequenceName="SQ_MY_TABLE")
private Long myTableId;
公共静态字符串getPKColumnName(类pojo){
if(pojo==null)
返回null;
字符串名称=null;
for(字段f:pojo.getDeclaredFields()){
Id=null;
Column=null;
注释[]as=f.getAnnotations();
对于(注释a:as){
if(a.annotationType()==Id.class)
id=(id)a;
else if(a.annotationType()==Column.class)
列=(列)a;
}
if(id!=null&&column!=null){
name=column.name();
打破
}
}
if(name==null&&pojo.getSuperclass()!=Object.class)
name=getPKColumnName(pojo.getSuperclass());
返回名称;
}
提醒一下:这对复合主键不起作用。当ID的声明位于
MappedSuperclass
中时,这不起作用。但是如果(name==null)返回getPkColumnName(pojo.getSuperclass()),则可以添加代码>在结尾处。@TobiasLiefke谢谢您提供的信息。我改变了密码。
public static String getPKColumnName(Class<?> pojo) {
if (pojo == null)
return null;
String name = null;
for (Field f : pojo.getDeclaredFields()) {
Id id = null;
Column column = null;
Annotation[] as = f.getAnnotations();
for (Annotation a : as) {
if (a.annotationType() == Id.class)
id = (Id) a;
else if (a.annotationType() == Column.class)
column = (Column) a;
}
if (id != null && column != null){
name = column.name();
break;
}
}
if (name == null && pojo.getSuperclass() != Object.class)
name = getPKColumnName(pojo.getSuperclass());
return name;
}