考虑 Person 类:
package model;
import java.io.Serializable;
import openAPI.modelInterfaces.PersonInterface;
/**
*
* @author X3
*
*/
public class Person implements PersonInterface , Serializable
{
private static final long serialVersionUID = 1L;
private String m_id = "Missing ID number";
private String m_firstName = "Missing first name";;
private String m_lastName = "Missing last name";;
private String m_userName = "Missing user name";;
private String m_password = "Missing password";
private String m_address = "Missing address";
private String m_status = "Missing status";
/**
*
* @param _id
* @param _firstName
* @param _lastName
* @param _userName
* @param _password
* @param _address
*/
public Person(String _id, String _firstName , String _lastName ,
String _userName , String _password , String _address , String _status)
{
this.m_id = _id;
this.m_firstName = _firstName;
this.m_lastName = _lastName;
this.m_userName = _userName;
this.m_password = _password;
this.m_address = _address;
this.m_status = _status;
}
public Person() {}
////////////////////////// getters /////////////////////////
@Override
public String getLastName() {
return this.m_lastName;
}
@Override
public String getIdnumber() {
return this.m_id;
}
@Override
public String getFirstName() {
return this.m_firstName;
}
@Override
public String getUserName() {
return this.m_userName;
}
@Override
public String getPassword() {
return this.m_password;
}
@Override
public String getAddress() {
return this.m_address;
}
///////////////////// setters ///////////////////////
@Override
public void setAddress(String _address) {
if (!isMissing(_address))
this.m_address = _address;
}
@Override
public void setLastName(String _lastName) {
if (!isMissing(_lastName))
this.m_lastName = _lastName;
}
@Override
public void setPassword(String _password)
{
if (!isMissing(_password))
this.m_password = _password;
}
@Override
public void setUsername(String _userName) {
this.m_userName = _userName;
}
@Override
public void setFirstName(String _newName) {
if (!isMissing(_newName))
this.m_firstName = _newName;
}
@Override
public void setidNumber(String _newID) {
if (!isMissing(_newID))
this.m_id = _newID;
}
// others
private boolean isMissing(String value)
{
return((value == null) || (value.trim().equals("")));
}
@Override
public void setStatus(String _status) {
if (!isMissing(_status))
this.m_status = _status;
}
@Override
public String getStatus() {
return this.m_status;
}
}
及其在MYSQL中的匹配表:
/**
* creating a table for each type person in the bank
* @param tableType
* @throws SQLException
*/
public void createTable(String tableType) throws SQLException
{
m_statement.executeUpdate (
"CREATE TABLE IF NOT EXISTS "+ tableType +" ("
+ "FirstName CHAR(20), LastName CHAR(20),"
+ "Address CHAR(50), IdNumber CHAR(20),"
+ "UserName CHAR(20), Password CHAR(20) , Status CHAR(20) , PRIMARY KEY (IdNumber))");
}
我想使用 Hibernate 将 Person 对象映射到 MYSQL DB 中的记录。
这是 hbm.xml 文件:
<?xml version='1.0'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- name of the package -->
<hibernate-mapping package="model">
<!-- name of the class & name of the table , that we want to MAP the object to -->
<class name="Person" table="PersonnelTable">
<id name="m_id" type="String" column="IdNumber" >
<generator class="identity"/>
</id>
<property name="m_firstName" column="FirstName" type="string"/>
<property name="m_lastName" column="LastName" type="string"/>
<property name="m_userName" column="UserName" type="string"/>
<property name="m_passWord" column="Password" type="string"/>
<property name="m_address" column="Address" type="string"/>
<property name="m_status" column="PersonType" type="string"/>
</class>
</hibernate-mapping>
如何将主键 privateId
设置为非自动递增主键?
我不希望 MYSQL 自动为我映射的每个人生成唯一的 key ,因为 ID由用户给出。
谢谢
最佳答案
免费提供、易于搜索documentation说:
assigned
lets the application assign an identifier to the object before save() is called. This is the default strategy if no element is specified.
此外,您绝对不应该使用 char
作为列的类型,尤其是 ID。 char 列用空格填充。请改用 varchar。
而且:注释从 10 年前的 Java 5 就已经存在了。为什么您仍然使用专有的 XML 文件而不是标准的、更简单、更安全的 JPA 注释来定义映射?
关于java - 如何在Hibernate中定义非生成的主键字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23007711/