请解释@Transient在放置在字段上的同时将@Transient置于getter和setter方法的目的。 该字段将根据需要存储到DB中。
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Column(name = "name")
private String name;
@Transient
public long getName() {
return name;
}
@Transient
public void setName(String name) {
this.name = name;
}
}
答案 0 :(得分:0)
这实际上是一个棘手的情况。 onStudentIdChanged
注释和public static void main(String[] args) {
String[] bagOfWords = {"i", "like", "to", "play", "tennis", "think", "football", "needs", "big", "changes"};
List<String> sentences = new ArrayList<String>();
sentences.add("i like to play tennis");
sentences.add("i think football needs big changes");
sentences.add("i like football");
for(String s1 : sentences){
String[] sentenceSplit = splitWords(s1);
for(int i=0;i<sentenceSplit.length;i++){
if(sentenceSplit[i].equals(bagOfWords[i])){
System.out.print("1 ");
}
else{
System.out.print("0 ");
}
}
System.out.println("");
}
}
private static String[] splitWords(String sentence){
String[] afterSplit = sentence.split(" ");
return afterSplit;
}
关键字不提供相同的功能。使用@transient
关键字不会序列化您的数据。但是使用transient
注释将序列化数据但不会在数据库中transient
,因为您已在数据库中标记了@transient
注释字段为persisted
的字段因为@column
允许您指定数据库中要保留该属性的列的名称。
答案 1 :(得分:0)
在您拥有的代码中,它们没有任何效果,因为字段上的@Id导致默认访问为字段,因此忽略任何方法注释。如果属性访问是默认的(通过getter上的@Id或类上的@Access(PROPERTY)),@ Transnsnnotations将导致JPA忽略访问器,可能是因为可以拾取字段映射。但是,在这种情况下,该字段应使用@Access(FIELD)进行注释。
我认为@Transient注释是实体具有默认属性访问权时的剩余部分。
答案 2 :(得分:0)
我怀疑它已被忽略,因为列已被标记,正如您所说,它正在根据需要进行更新。启用日志记录会确认这一点,因为它会生成警告
您可以进行测试,创建新的测试字段并将getter / setter标记为Transient