Qu'est-ce que @StaticMetamodel et SingularAttribute<Obj Obj>?

Je suis à essayer de comprendre ce code, pendant environ deux heures maintenant, par exemple en dessous de la classe ce sont ces champs qui représentent?

import java.util.Date;
import javax.persistence.metamodel.ListAttribute;
import javax.persistence.metamodel.SingularAttribute;
import javax.persistence.metamodel.StaticMetamodel;
import java.util.UUID;

@StaticMetamodel(Address.class)
public class Address_ extends  {
    public static volatile SingularAttribute<Address, Long> id;
    public static volatile SingularAttribute<Address, UUID> personId;
    public static volatile SingularAttribute<Address, Person> person;
}

La Address.class est une classe java qui a la définition suivante:

@Entity
@Table(name = "address", schema = "public")
public class Address{
    private Long id;
    private Person person;
    private UUID personId;
    //....
}

Pouvez-vous, s'il vous plaît, expliquer ce que sont les @StaticMetamodel et @SingularAttribute annotations? Il peut être simple, mais je ne peux pas comprendre.

OriginalL'auteur MoienGK | 2013-10-31