【发布时间】:2018-04-07 09:57:08
【问题描述】:
虽然我在我的类中将一些 getter 方法标记为 @Transient (javax.persistence),但调用该方法时的结果会保存在数据库中:
@Entity
@Table(name = "Song")
@EntityListeners(AuditingEntityListener.class)
public class Song implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "artist_id")
private Artist artist;
@Transient
public static final Path MUSIC_DIRECTORY = Paths.get(System.getProperty("user.home"), "TUBEMIRROR-MUSIC");
@Transient
public String getPathBySongId(){
return Paths.get(MUSIC_DIRECTORY.toString(), this.getYoutubeId() + ".mp3").toString();
}
}
由于 songId 与文件系统上歌曲的路径之间存在 1:1 的关系,因此我不想保留它。 当我使用 JPARepository 读取数据库中所有歌曲的列表时,我看到尽管有符号,但该字段仍然存在。
谁能告诉我为什么会这样?
【问题讨论】:
-
发布你的其他课程
-
请检查您的持久实体类是否具有基于字段或属性的注释。
-
@DN1 我添加了类中的所有内容,除了吸气剂
-
@fisc 我对休眠还很陌生,但我认为我有基于字段的注释?
-
默认不是FIELD。如果您在字段上放置映射注释,则访问类型为 FIELD,如果您在 getter 上放置映射注释,则访问类型为 PROPERTY。并且所有实体层次结构必须在映射注释放置中保持一致:总是在字段上,或者总是在 getter 上,但不能混合。