我的所有JPA实体类都实现了一个名为Entity的接口,它的定义如下:
public interface Entity extends Serializable {
// some methods
}
我的JPA实体的一些字段在它们之上有@Column注释,而有些则没有. MyEntity类的定义如下:
@Entity
public class MyEntity implements Entity {
@Id
private Long id; // Assume that it is auto-generated using a sequence.
@Column(name="field1")
private String field1;
private SecureString field2; //SecureString is a custom class
//getters and setters
}
我的删除方法接受实体.
@Override
public void delete(Entity baseEntity) {
em.remove(baseEntity); //em is entityManager
}
每当调用delete方法时,我想在delete方法中有三件事:
1)MyEntity的类型为SecureString的字段
2)DB中该特定字段的列名(该字段可能有也可能没有@Column注释)
3)id字段的值
请注意,当调用delete()方法时,我们不知道它被调用的实体,可能是MyEntity1,MyEntity2等.
我试过做类似下面的事情:
for (Field field : baseEntity.getClass().getFields()) {
if (SecureString.class.isAssignableFrom(field.getType())) {
// But the field doesn't have annotation @Column specified
Column column = field.getAnnotation(Column.class);
String columnName = column.name();
}
}
但这只有在字段有@Column注释时才有效.它也没有让我得到我需要的其他两件事.有任何想法吗?