Java如何在JPA中创建实体对象?
本示例向您展示一个简单的示例,该示例用于将数据库表映射到java对象。该实体是一个普通的旧Java对象(POJO)。JPA规范并不要求该类扩展或实现其他类或接口。
要保留在数据库中的类必须使用javax.persistence.Entity注解(@Entity)进行注解。正如您在Record下面的课程中看到的那样。
默认情况下,映射表名称等于类名称。但是,如果表名不同于类名,则可以使用@Table注解。使用name此批注的属性设置表名称。该注解也位于javax.persistence包中。
import javax.persistence.*; import java.io.Serializable; @Entity @Table(name = "records") public class Record implements Serializable { }
在JPA中,可以在类字段中或使用getters或setters方法添加元数据。选择一个选项,因为您不能将它们都混在同一个实体对象中。在这里,我们将注解该类的获取者。
要定义实体的主键,我们使用@Id注解。该@GeneratedValue注解用于定义如何应生成实体的主键。例如,在此示例中,策略定义为GenerationType.IDENTITY。在MySQL数据库中,将其实现为一auto-increment列。
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return id; }
默认情况下,实体的字段将保留在数据库表中的相应字段中。如果您不想保留实体字段,则必须在其中添加@Transient注解。如果您的实体字段名称与表字段不同,则可以使用@Column注解定义列名称和列的其他属性,例如长度,字段的唯一性和not-null属性。
要定义实体对象之间的关系,你可以使用注解如@OneToOne,@OneToMany,@ManyToOne和@ManyToMany。该注解表示Java对象中数据库表之间的关系。
@Column(nullable = false, length = 50) public String getTitle() { return title; } @Column(name = "release_date") public Date getReleaseDate() { return releaseDate; } @ManyToOne @JoinColumn(nullable = false) public Artist getArtist() { return artist; }
这是Record实体的完整类。这将保存有关音乐记录的信息。该实体与Artist和Label实体等其他实体有关系。
package org.nhooo.example.jpa.entity; import javax.persistence.*; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; @Entity @Table(name = "records") public class Record implements Serializable { private static final long serialVersionUID = 1L; private Long id; private String title; private Date releaseDate; private Artist artist; private Label label; private List<Track> trackList = new ArrayList<>(); public Record() { } @Id @GeneratedValue(strategy = GenerationType.IDENTITY) public Long getId() { return id; } @Column(nullable = false, length = 50) public String getTitle() { return title; } @Column(name = "release_date") public Date getReleaseDate() { return releaseDate; } @ManyToOne @JoinColumn(nullable = false) public Artist getArtist() { return artist; } @ManyToOne @JoinColumn(nullable = false) public Label getLabel() { return label; } @OneToMany(mappedBy = "record") public List<Track> getTrackList() { return trackList; } public void setId(Long id) { this.id = id; } public void setTitle(String title) { this.title = title; } public void setReleaseDate(Date releaseDate) { this.releaseDate = releaseDate; } public void setArtist(Artist artist) { this.artist = artist; } public void setLabel(Label label) { this.label = label; } public void setTrackList(List<Track> trackList) { this.trackList = trackList; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Record record = (Record) o; return Objects.equals(id, record.id) && Objects.equals(title, record.title) && Objects.equals(releaseDate, record.releaseDate); } @Override public int hashCode() { return Objects.hash(id, title, releaseDate); } @Override public String toString() { return "Record{" + "id=" + id + ", title='" + title + '\'' + ", releaseDate=" + releaseDate + '}'; } }
Maven依赖
<!-- https://search.maven.org/remotecontent?filepath=javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar --> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency>