org.hibernate.exception.SQLGrammarException: ORA-01747: 无效的用



我正在使用Appfuse来开发我的应用程序。我得到了一个例外,如下所示。我猜休眠映射在特殊列名 ADSL_DEVICE 时出现问题。验证(使用符号)会导致错误。请帮助我解决此问题。

执行测试用例时,我收到警告和错误消息

休眠NODE_ID_SEQ:从双
休眠:插入到 NODE (AREA_ID、描述、FIRMWARE_VERSION、IS_ENABLE、IS_VISIBLE、MIB_VERSION、名称、PARENT_ID、NODE_TYPE_ID、SERIAL_NUMBER、SHORT_NAME、ID) 值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
休眠:插入ADSL_DEVICE(ADSL_NAME、ADSL_SERIAL_NUMBER、CONNECTION_REQUEST、HARDWARE_VERSION、IP_ADDRESS、制造商、OUI、PRODUCT_CLASS、PROVISIONING_CODE、SOFTWARE_VERSION、验证、NODE_ID)值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
警告 - SqlExceptionHelper.logExceptions(143) |SQL 错误: 1747, SQLState: 42000
错误 - SqlExceptionHelper.logExceptions(144) |ORA-01747:无效的用户表列、表列或列规范

测试运行: 1, 失败: 0,

错误: 1, 跳过: 0, 已用时间: 9.289 秒 <<<失败!><<<错误! org.hibernate.exception.SQLGrammarException: ORA-01747: 无效的用户.table.column、table.column, or column specification

然后,我通过添加引号来定义列名:ADSL_DEVICE。验证"

@Entity
@Table(name = AdslDevice.TABLE_NAME, uniqueConstraints =
    @UniqueConstraint(columnNames = AdslDevice.SERIAL_NUMBER))
@PrimaryKeyJoinColumn(name = AdslDevice.NODE_ID)
public class AdslDevice
    extends Node
    implements java.io.Serializable {
// Constant
public static final String TABLE_NAME = "ADSL_DEVICE";
public static final String NODE_ID = "NODE_ID";
public static final String ADSL_NAME = "ADSL_NAME";
public static final String SERIAL_NUMBER = "ADSL_SERIAL_NUMBER";
....
@Column(name = ""VALIDATE"", length = 1)
public String getValidate() {
    return this.validate;
}
public void setValidate(String validate) {
    this.validate = validate;
}
....
}

但是我仍然收到错误,休眠查询似乎死锁,执行查询时不响应任何消息。错误是什么?如何修复该错误?

休眠:从NODE_ID_SEQ双 休眠:插入到 NODE (AREA_ID、描述、FIRMWARE_VERSION、IS_ENABLE、IS_VISIBLE、MIB_VERSION、名称、PARENT_ID、NODE_TYPE_ID、SERIAL_NUMBER、SHORT_NAME、ID) 值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
休眠:插入ADSL_DEVICE(ADSL_NAME、ADSL_SERIAL_NUMBER、CONNECTION_REQUEST、HARDWARE_VERSION、IP_ADDRESS、制造商、OUI、PRODUCT_CLASS、PROVISIONING_CODE、SOFTWARE_VERSION、"验证"NODE_ID)值 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

这是我的测试用例:

AdslDeviceDao类从Appfuse扩展了GenericDao。

public class AdslDeviceDaoTest extends BaseDaoTestCase {
@Autowired
private AdslDeviceDao adslDeviceDao;
@Test
public void testAddAdslFirmware() {
    NodeType type = new NodeType();
    type.setId(1L);
    AdslDevice node = new AdslDevice();
    // Node values
    node.setArea(new Area(1L, "Ha noi"));
    node.setDescription("Node desc");
    node.setFirmwareVersion("1.0");
    node.setIsEnable((short)1);
    node.setIsVisible((short)1);
    node.setMibVersion("v1");
    node.setName("Node name");
    node.setNodeType(type);
    node.setSerialNumber("4578787864896");
    node.setShortName("S1");
    // adsl values
    node.setAdslName("Adsl name");
    node.setAdslSerialNumber("4578787864896");
    node.setHardwareVersion("1.0");
    node.setIpAddress("10.2.4.58");
    node.setManufacturer("Vnpttech");
    node.setOui("6.1.2.3");
    node.setProductClass("Product class");
    node.setProvisioningCode("6630");
    node.setSoftwareVersion("11");
    node.setValidate("1");
    Node nodenew = adslDeviceDao.save(node);
    flush();
    assertEquals("F23", nodenew.getName());
    assertNotNull(nodenew.getId());
 }
}

谢谢!

如果您使用的是 Oracle,看起来 VALIDATE 是一个关键字。尝试重命名列。

相关内容

  • 没有找到相关文章

最新更新