我正在开发一个Hibernate/Spring应用程序来管理一些电影.
课堂电影与班级类型有很多关系.这两个类都使用GeneratedValue注释生成了id.
通过使用@Cascade(CascadeType.SAVE_UPDATE)通过电影对象保存类型我已经对类型的类型属性(例如它的名称;"Fantasy")设置了唯一约束.
我现在要做的是让Hibernate检查是否已经存在类型为"Fantasy"的类型,如果有,请使用该类型的id而不是尝试插入新记录.(后者显然会抛出错误)
最后我需要的是像select-before-update之类的东西,但更像是select-before-save.
Hibernate中有这样的功能吗?
一些代码:
电影课
@Entity
public class Movie {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String name;
@Lob
private String description;
@Temporal(TemporalType.TIME)
private Date releaseDate;
@ManyToMany
@Cascade(CascadeType.SAVE_UPDATE)
private Set<Genre> genres = new HashSet<Genre>();
.... //other methods
Run Code Online (Sandbox Code Playgroud)
类型课程
@Entity
public class Genre {
@Column(unique=true)
private String type;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id
....//other methods
Run Code Online (Sandbox Code Playgroud) 我最近开始使用hibernate和spring.
在开始时,我被告知使用sessionFactory和openSession以及beginTransaction进行数据库调用.
后来我听说dao的,所以我开始使用它创建一个接口,在类中实现这个接口,然后让这个类扩展HibernateDAOSupport.
我认为这是非常可靠的,直到一位同事告诉我这种方式已被弃用,我不应该使用HibernateDAOSupport类.但是在我的dao实现类中使用SessionFactory实例,在新的单独服务类中使用该类的实例.由于这似乎是一个很好的方法,我决定遵循这条道路.
刚才我已经读过这个方法也被新版本的春天所弃用......所以我的问题是:究竟什么是将hibernate和spring结合在一起的正确最新方法?
我也听过关于实体经理的讨论,那是什么意思?
我正在寻找使用它们的一般方法,如果一般规则有任何例外,请提供这些例外的示例.