@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;
如何使用反射从我的POJO中获取主键列名称,并使用javax.persistence.Id
注释定义?我必须找到@Id
,然后获取name
注释的@Column
属性...我不知道该怎么做...
谢谢!
答案 0 :(得分:3)
这是一个独立的解决方案:
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;
}
只是单挑:这对复合主键不起作用。