开发者

Get column name in jpa

I have a query factory that takes a column n开发者_如何学Pythoname as an attribute in order to search for that column. Right now I'm passing the name of the column as a string, so it's kind of hardcoded. If the name of the column changes in the entity's annotation, that "hidden dependency" breaks up.

Is there a way in jpa to retrieve the real name of the column and have it available at compile time, so I can use it in queries?


Of course, there is always reflection on annotations. Suppose you have typical JPA column definition:

    @Basic(optional = true)
    @Column(name = "MY_COLUMN_NAME_DESC", nullable = true, length = 255)
    public String getDesc() {
        return desc;
    }

Then having getter method inspected yields column name value (example adopted from here):

Method method = ... //obtain entity object
Annotation[] annotations = method.getDeclaredAnnotations();

for(Annotation annotation : annotations){
    if(annotation instanceof Column){
        Column myAnnotation = (Column) annotation;
        System.out.println("name: " + myAnnotation.name());
        System.out.println("value: " + myAnnotation.value());
    }
}

The example assumes method property access in JPA entity but nothing prevents you to adopt it to field level by applying reflection to a field.


This is a bit late, I know. Topchef's answer is correct, but there are a couple of other factors that need to be considered if you want this to work for arbitrary entity classes. I'm adding them in case someone comes across this answer in a web search:

  • The AttributeOverride class annotation can override the column specified with the Column annotation.
  • If the inheritance strategy is JOINED, the column may reside in a different table even if a table is not specified with the Column annotation.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜