有什么区别
@OneToMany(cascade=REMOVE, mappedBy="customer")
public List<Order> getOrders() { ... }
Run Code Online (Sandbox Code Playgroud)
和
@OneToMany(mappedBy="customer", orphanRemoval="true")
public List<Order> getOrders() { ... }
Run Code Online (Sandbox Code Playgroud)
这个例子来自Java EE Tutorial,但我仍然不了解细节.
我有以下实体:
球队
@Entity
@Table
public class Team {
[..]
private Set<UserTeamRole> userTeamRoles;
/**
* @return the userTeamRoles
*/
@OneToMany(cascade = { CascadeType.ALL }, mappedBy = "team", fetch = FetchType.LAZY)
public Set<UserTeamRole> getUserTeamRoles() {
return userTeamRoles;
}
/**
* @param userTeamRoles
* the userTeamRoles to set
*/
public void setUserTeamRoles(Set<UserTeamRole> userTeamRoles) {
this.userTeamRoles = userTeamRoles;
}
Run Code Online (Sandbox Code Playgroud)
}
和
USER_TEAM_ROLE
@Entity
@Table(name = "user_team_role")
public class UserTeamRole {
@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinColumn(name = "FK_TeamId")
public Team getTeam() {
return …Run Code Online (Sandbox Code Playgroud) 在使用时创建在线商店应用程序时play-1.2.4,我遇到了jpa的一些问题.我想使用CRUD modulein play 提供管理区域.在这里,管理员用户可以创建/编辑或删除应用程序中的实体(如Customers,Orders) ,Item等等).
A Customer可以创建Orders.Each Order将有一组CartItems .当Order删除时,CartItem必须删除相应的s .当a Customer被删除时,他的所有订单也必须被删除.我想我可以通过设置cascade属性来获得jpa注释.
我这样建模了
Customer.java
@Entity
public class Customer extends Model {
@Email
@Required
public String email;
...
@OneToMany(mappedBy="customer", cascade=CascadeType.ALL)
public List<Order> orders;
@OneToOne
public PayMethod currentPayment;
...
}
Run Code Online (Sandbox Code Playgroud)
Order.java
@Entity
public class Order extends Model {
@OneToMany( cascade=CascadeType.ALL,orphanRemoval=true,fetch=FetchType.EAGER)
public Set<CartItem> cartItems;
@ManyToOne
public Customer customer;
@ManyToOne
public PayMethod paymentMethod;
... …Run Code Online (Sandbox Code Playgroud) 请检查此实体:
@Entity
@Table(name = "css_empresa")
public class Empresa extends EntidadContactable implements Serializable,
Convert {
private static final long serialVersionUID = 1L;
@Id
@SequenceGenerator(name = "EMPRESA_ID_GENERATOR", sequenceName = ConstantesSecuencias.SEQ_EMPRESA, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EMPRESA_ID_GENERATOR")
@Column(name = "cod_empresa", unique = true, nullable = false)
private Long id;
@Column(name = "num_ruc", precision = 13)
private BigDecimal numRuc;
@Column(name = "num_rup", precision = 15)
private BigDecimal numRup;
@Column(name = "txt_direccion_web", length = 255)
private String txtDireccionWeb;
@Column(name = "txt_nombre", nullable …Run Code Online (Sandbox Code Playgroud) 我需要花一点时间解释一下,所以请和我在一起.我有NewsFeed一个与自己有OneToMany关系的表.
@Entity
public class NewsFeed(){
...
@ManyToOne(optional=true, fetch=FetchType.LAZY)
@JoinColumn(name="REPLYTO_ID")
private NewsFeed replyTo;
@OneToMany(mappedBy="replyTo", cascade=CascadeType.ALL)
private List<NewsFeed> replies = new ArrayList<NewsFeed>();
public void addReply(NewsFeed reply){
replies.add(reply);
reply.setReplyTo(this);
}
public void removeReply(NewsFeed reply){
replies.remove(reply);
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以这样想.每个Feed都有一个List也是类型的回复NewsFeed.现在,我很容易删除原始Feed并获取更新后的列表.删除后我需要做的就是这个.
feeds = scholarEJB.findAllFeed(); //This will query the db and return updated list
Run Code Online (Sandbox Code Playgroud)
但是在尝试删除replies并获取更新后的列表时遇到问题.所以这是我如何删除replies.在我的JSF托管bean里面
//Before invoke this method, I have the value of originalFeed, and deletedFeed set.
//These original feeds are display inside a p:dataTable X, …Run Code Online (Sandbox Code Playgroud)