ora*_*nge 12 java persistence jpa javax.persistence
这是我为实体设置的:
@Entity
@Getter
@Setter
@Table(name = "movies", schema = "public")
public class Movie {
@Id
@Column(name = "id")
private UUID movieId;
@OneToMany(mappedBy = "actor", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<Actors> actors = new HashSet<>();
//Getters and setters
}
}
Run Code Online (Sandbox Code Playgroud)
@Entity
@Getter
@Setter
@Table(name = "actors_movies", schema = "public")
public class ActorMovie {
@EmbeddedId
private ActorId id;
@ManyToOne(fetch = FetchType.LAZY)
@MapsId("movieId")
@JoinColumn(name = "id_movie_movie")
private Movie movie;
//Getters and setters below
}
Run Code Online (Sandbox Code Playgroud)
entityManager.merge()当我Actor向电影列表添加新内容时,我能够成功调用。以下成功保留了表格。
Movie movie = getMovieById(id);
movie.setActors(new Actor());
entityManager.merge(movie);
Run Code Online (Sandbox Code Playgroud)
然后我想更新演员的名字,所以我要做的是这个。我无法更新已经存在/存在的 Actor:
Movie movie = getMovieById(id);
movie.getActors().get(0).setName("New Name");
entityManager.merge(movie);
Run Code Online (Sandbox Code Playgroud)
以上不起作用,我可以看到在调试模式下正在更新对象,但是在merge()调用时它不会更新数据库。
我哪里错了?我认为如果已经存在合并会更新。
实体管理器。merge()操作用于将对分离的对象所做的更改合并到持久性上下文中。merge 不会直接将对象更新到数据库中,而是将更改合并到持久性上下文(事务)中。
当transaction提交时,或者如果持久化上下文被刷新,那么该对象将在数据库中更新。
For youmerge不是必需的,尽管它经常被误用。要更新一个对象,你只需要更新read它,然后change通过它的set方法更新它的状态,然后提交transaction. 该EntityManager会弄清楚,已经改变了一切,并更新数据库。merge仅当您拥有persistence对象的分离副本时才需要。
就您而言,您没有进行交易提交。
entityManager.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |