gpt4 book ai didi

java - 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?

转载 作者:可可西里 更新时间:2023-11-01 07:52:24 27 4
gpt4 key购买 nike

我正在基于 MySQL 数据库中的现有表创建 Java 持久性实体 Bean(使用 NetBeans IDE 8.0.1)。我在该表中遇到了一个类型为 "Unsigned TINYINT(3)" 的字段。我发现可以对 define the type of a column as an unsigned int 执行以下操作:

private long foo;

@Column(columnDefinition = "UNSIGNED INT(11)")
public long getFoo()
{
return foo;
}

重现问题的步骤:

我正在尝试创建一个字段,如下所示:

@Size(max = 3)
@Column(name = "WorkingHours", columnDefinition="UNSIGNED TINYINT(3) default '40'")
private Integer workingHours;

问题:

我在将我的项目部署到我的服务器时收到以下错误:

{"JBAS014671: Failed services" => {"jboss.persistenceunit.\"my-project.ear/my-project-ejb.jar#old-db\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"my-project.ear/my-project-ejb.jar#old-db\": javax.persistence.PersistenceException: Unable to execute JPA schema generation create command [create table ... etc.]
Caused by: javax.persistence.PersistenceException: Unable to execute JPA schema generation create command [create table ... etc.]
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNSIGNED TINYINT(3), ... etc.' at line 1"}}

但是,如果我从我的 columnDefinition 中删除 "UNSIGNED"(所以该行变为 columnDefinition="TINYINT(3) default '40'") 我的项目部署成功。所以看起来 "UNSIGNED" 没有被识别。

所以我的问题是:如何将我的列(字段)定义为无符号 TINYINT?

更多细节:

我不确定它是否重要,但我的 persistence.xml 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="old-db" transaction-type="JTA">
<jta-data-source>java:/jboss/datasources/mySQL_pool_old</jta-data-source>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
</properties>
</persistence-unit>
</persistence>

最佳答案

经过更多试验后,我找到了答案。

单词"UNSIGNED" 应该出现在"TINYINT" 之后而不是之前。该字段应定义如下:

@Size(max = 3)
@Column(name = "WorkingHours", columnDefinition="TINYINT(3) UNSIGNED default '40'")
private Integer workingHours;

我不确定这是为什么,我只是通过反复试验才发现的。也许其他人可以提供一个引用来解释为什么会这样。

关于java - 如何将 javax.persistence.Column 定义为 Unsigned TINYINT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26341084/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com