本文汇总一下JPA中常用的注解。
1. @Entity
用于标识实体类,表示这个类将映射到数据库中的表。
@Entity
public class Product {
}
2. @Table
用于指定实体类对应的表名。
@Entity
@Table(name = "products")
public class Product {
}
3. @ Id
表示这个字段是主键。
@Id
private Long id;
4. @GeneratedValue
指定主键的生成策略。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
5. @Column
用于指定字段与数据库表中列的映射关系。
@Column(name = "product_name")
private String name;
6. @Transient
表示该字段不会持久化到数据库。
@Transient
private transient String tempData;
7. @OneToOne
一对一关联。
@OneToOne
private Address address;
8. @OneToMany
一对多关联。
@OneToMany(mappedBy = "user")
private List<Order> orders;
9. @ManyToOne
多对一关联。
@ManyToOne
private User user;
10. @ManyToMany
多对多关联。
@ManyToMany
private List<Role> roles;
11. @JoinColumn
指定关联字段在数据库表中的列名。
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
12. @JoinTable
指定多对多关联表的信息。
@ManyToMany
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private List<Role> roles;
13. @Embedded
嵌入对象。
@Embedded
private Address address;
14. @EmbeddedId
复合主键。
@EmbeddedId
private UserId id;
15. @Version
乐观锁版本号字段。
@Version
private int version;
16. @Temporal
指定时间类型。
@Temporal(TemporalType.DATE)
private Date birthDate;
17. @Basic
基本属性。
@Basic(fetch = FetchType.LAZY)
private String description;
18. @NamedQuery
命名查询。
@NamedQuery(name = "Product.findByName", query = "SELECT p FROM Product p WHERE p.name = :name")
19. @Query
自定义查询。
@Query("SELECT p FROM Product p WHERE p.price > :price")
List<Product> findByPriceGreaterThan(@Param("price") BigDecimal price);
20. @Lob
大字段。
@Lob
private byte[] image;