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>