我正在使用MySQL数据库。
在我的表格中,我有两个主键,其中一个是自动递增的。
@Embeddable
public class EmployeeId implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Column(name = "id", nullable = false)//
This is just Pk in mysql table
**private int id;**
// I have tried and @GeneratedValue(strategy = GenerationType.IDENTITY),
@GeneratedValue(strategy = GenerationType.IDENTITY)
//and @GeneratedValue(strategy = GenerationType.TABLE)
//@GeneratedValue(strategy = GenerationType.AUTO, generator = "id") @SequenceGenerator(name = "id", sequenceName = "id")
**this is auto incremented and pk in mysql table**
@Column(name = "gender_key", nullable = false)
private int gender_key;
}
@Entity
@Table(name = "employee")
public class employee {
@EmbeddedId
private EmployeeId employeeId;
private String emp_name;
private String mobile_no;
employee() {
}}
public interface employeeRepository extends
JpaRepository<employee, EmployeeId> {
}
在我的控制器中,我想在employeeRepository.save(bean)之后使用id;方法,因为我想将该id保存在不同的数据库中。
logger.info(&#34; gender_key是---&gt;&#34; + gender_key);
但我总是得到gender_key的0值。
我尝试的是:
bean = employeeRepository.save(bean)
int gender_key= bean.getGender_key();
logger.info("gender_keyis --- > "+gender_key);
但是gender_key的值仍为0(零)。 或者我必须在存储库中编写的任何查询。
如何获取插入MySQL表的gender_key的自动递增值?
请帮助。
提前致谢。
答案 0 :(得分:1)
您的JPA @Id
不需要与数据库PK列匹配。只要它是独一无二的,那就重要了。
来自https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing:
JPA Id并不总是必须匹配数据库表primary 密钥约束,也不是主键或唯一约束。
由于您的自动增量列保证是唯一的,因此只需使用gender_key作为@ID
并将地图ID作为普通列。
@Entity
@Table(name = "employee")
public class employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int genderKey;
@Column
private int id;
}
老实说,我会发现你的架构令人困惑。
我还建议阅读以下内容:
答案 1 :(得分:0)
您在id
字段错过了@GeneratedValue。
根据其值,您可以自由选择生成策略,例如序列,id表,自动内部id生成。
最后但并非最不重要的GenerationType.AUTO将选择上述策略之一。
请参阅javax.persistence.GeneratedValue
和javax.persistence.GenerationType
的Javadoc。