我尝试使用hibernate注释通过数据库向MySQL表添加约束:
package databean;
import javax.persistence.*;
@Entity
@Table(name = "ADMIN",
uniqueConstraints = {
@UniqueConstraint(columnNames = "userName"),
@UniqueConstraint(columnNames = "email")
})
public class AdminBean {
// Private fields
@Id @GeneratedValue
@Column(name = "adminId")
private int adminId; // PK
@Column(name = "userName")
private String userName;我还有两个用于映射的xml文件: hibernate.cfg.xml和Admin.hbm.xml
1)映射resource="hibernate/Admin.hbm.xml"/
2)
<hibernate-mapping>
<class name="databean.AdminBean" table="ADMIN">
<meta attribute="class-description">
This class contains the admin detail.
</meta>
<id name="adminId" type="int" column="adminId">
<generator class="native"/>
</id>
<property name="userName" column="userName" type="string"/>
<property name="firstName" column="firstName" type="string"/>
<property name="lastName" column="lastName" type="string"/>
<property name="email" column="email" type="string"/>
<property name="phone" column="phone" type="string"/>
<property name="password" column="password" type="string"/>
<property name="city" column="city" type="string"/>
<property name="zipCode" column="zipCode" type="string"/>
</class>
</hibernate-mapping>根据我在网上的发现:“到目前为止,您已经看到Hibernate如何使用XML映射文件将数据从POJO转换为数据库表,反之亦然。Hibernate注释是在不使用XML文件的情况下定义映射的最新方法。除了或替代XML映射元数据之外,还可以使用注释。Hibernate注释是为对象和关系表映射提供元数据的强大方式。所有元数据都与代码一起被合并到POJO java文件中,这有助于用户在开发期间同时理解表结构和POJO。”(annotations.htm)。
如果我注释掉xml文件的映射,我将得到“未知实体: databean.AdminBean”的例外。现在甚至找不到数据库。
问题:
1)即使xml文件中没有映射,带有hibernate注释的数据库不应该工作吗?(所以它现在甚至不起作用了.)
2)如果没有带数据库的hibernate注释,是否应该将约束直接添加到xml映射文件中?
3)向MySQL表添加约束的最佳方法是什么?由于它们都是在运行应用程序时自动创建的,所以首先在mySQL中手动构建表似乎没有多大意义?
4)是否真的有必要向数据库和(可能) xml文件中添加约束?
更新:
即使我试图在xml文件中设置属性,mySQL数据库似乎也无法“捕获约束”,而且表仍然可以添加重复项。
现在,我怀疑添加这些约束的方式可能不会有问题,但更像是与mySQL表和我的code...though其他部分的“断开连接”可以很好地工作。以前有人遇到过类似的情况吗?
发布于 2016-07-20 23:05:03
我找到了原因:当我的应用程序第一次自动创建时没有添加约束时,我没有删除前一个表。希望没有人犯同样的错误。:)
https://stackoverflow.com/questions/38487225
复制相似问题