在JPA中,有什么方法可以复制Hibernate的saveOrUpdate行为,
saveOrUpdate
public void saveOrUpdate(Object object)
throws HibernateException
Either save(Object) or update(Object) the given instance, depending upon resolution of the unsaved-value checks (see the manual for discussion of unsaved-value checking).
This operation cascades to associated instances if the association is mapped with cascade="save-update".
Parameters:
object - a transient or detached instance containing new or updated state
Throws:
HibernateException
See Also:
save(Object), update(Object)
Run Code Online (Sandbox Code Playgroud)
它实质上检查数据库中是否已存在该对象,并根据需要更新该对象或保存该对象的新实例.
JPA无交易读取很好,但我真的很想从Hibernate中获取这个方法.经验丰富的JPA开发人员如何处理这个?
我想用ManyToMany关系来保持我的实体.但是在持久化过程中我遇到了一些问题.
我的实体:
@Entity
@Table(name = "USER")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long userId;
@Column(name = "NAME", unique = true, nullable = false)
String userName;
@Column(name = "FORNAME")
String userForname;
@Column(name = "EMAIL")
String userEmail;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "USER_USER_ROLES", joinColumns = @JoinColumn(name = "ID_USER"), inverseJoinColumns = @JoinColumn(name = "ID_ROLE"))
List<UserRoles> userRoles = new ArrayList<UserRoles>();
// getter et setter
}
Run Code Online (Sandbox Code Playgroud)
和
@Entity …Run Code Online (Sandbox Code Playgroud) 我有两张表与多对多的关系.当我持久化用户没有插入任何东西来连接表时,我映射了这两个实体.我正在调试直到持久化,我看到组列表不为空.
Ther是没有错误消息只是坚持用户.
用户< - >用户组< - >组
我使用的是netbeans 7.3,Glassfish 3.1.2.2,postgresql 9.1和eclipselink 2
另外,我试图显示下面的属性对我不起作用的sql脚本.
<property name="eclipselink.logging.logger" value="ServerLogger"/>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
Run Code Online (Sandbox Code Playgroud)
Abstact DAO:
public abstract class GenericDAO<E> implements Serializable{
@PersistenceContext
EntityManager entityManager;
public void persist(E object){
entityManager.persist(object);
}
public void merge(E object){
entityManager.merge(object);
}
public void delete(E object){
object = entityManager.merge(object);
entityManager.remove(object);
}
}
Run Code Online (Sandbox Code Playgroud)
用户实体:
@Entity
@Table(name = "users")
@XmlRootElement
@NamedQueries(
{
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
@NamedQuery(name = "Users.findByUserId", query …Run Code Online (Sandbox Code Playgroud) java ×3
jpa ×3
duplicates ×1
eclipselink ×1
hibernate ×1
many-to-many ×1
persistence ×1
sql ×1