
Java
在使用Hibernate进行数据库操作时,我们经常会遇到将Java中的Long类型映射到MySQL的BIGINT类型时出现错误的情况。本文将介绍这个错误的原因,并提供解决方案和案例代码。

MySQL
org.hibernate.MappingException: Could not determine type for: Java.lang.Long
这个错误的原因是Hibernate无法自动识别Java的Long类型与MySQL的BIGINT类型之间的映射关系。因为Hibernate默认将Java的Long类型映射到数据库的INTEGER类型。
要解决这个错误,我们需要告诉Hibernate将Java的Long类型映射到MySQL的BIGINT类型。有两种方法可以实现:
在实体类的Long类型属性上添加注解@Column,并指定columnDefinition为"BIGINT"。
<code>@Entity@Table(name = "example_table")public class ExampleEntity { ... @Column(columnDefinition = "BIGINT") private Long exampleLong; ...}</code>在映射文件(.hbm.XML)中的<property>标签中添加<column>子标签,并指定sql-type为"BIGINT"。
<code><hibernate-mapping> <class name="com.example.ExampleEntity" table="example_table"> ... <property name="exampleLong" column="example_long"> <column name="example_long" sql-type="BIGINT" /> </property> ... </class></hibernate-mapping></code>
以下是一个使用Hibernate映射Java Long到MySQL BIGINT的案例代码:
<code>@Entity@Table(name = "example_table")public class ExampleEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(columnDefinition = "BIGINT") private Long exampleLong; // Getters and setters}public class HibernateUtil { private static SessionFactory sessionFactory; public static SessionFactory getSessionFactory() { if (sessionFactory == null) { try { Configuration configuration = new Configuration().configure(); configuration.addAnnotatedClass(ExampleEntity.class); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()); sessionFactory = configuration.buildSessionFactory(builder.build()); } catch (Exception e) { e.printStackTrace(); } } return sessionFactory; }}public class MAIn { public static void mAIn(String[] args) { SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); ExampleEntity exampleEntity = new ExampleEntity(); exampleEntity.setExampleLong(1234567890L); session.save(exampleEntity); transaction.commit(); session.close(); }}</code>通过以上的解决方案和案例代码,我们可以成功地将Java中的Long类型映射到MySQL的BIGINT类型,避免了错误的发生。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号