Appfuse を使用してアプリケーションを開発しています。以下のように例外がありました。休止状態のマッピングには、特別な列名ADSL_DEVICE.VALIDATE (表記法を使用) に問題があり、エラーが発生したと思います。この問題を解決するのを手伝ってください。
テストケースを実行すると、警告とエラーメッセージが表示されます
Hibernate: デュアルから NODE_ID_SEQ.nextval を選択
Hibernate: NODE (AREA_ID, DESCRIPTION, FIRMWARE_VERSION, IS_ENABLE, IS_VISIBLE, MIB_VERSION, NAME, PARENT_ID, NODE_TYPE_ID, SERIAL_NUMBER, SHORT_NAME, ID) 値 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: ADSL_DEVICE (ADSL_NAME, ADSL_SERIAL_NUMBER, CONNECTION_REQUEST, HARDWARE_VERSION, IP_ADDRESS, MANUFACTURER, OUI, PRODUCT_CLASS, PROVISIONING_CODE, SOFTWARE_VERSION, VALIDATE , NODE_ID) 値 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
警告 - SqlExceptionHelper.logExceptions(143) | SQL エラー: 1747、SQLState: 42000
エラー - SqlExceptionHelper.logExceptions(144) | ORA-01747: user.table.column、table.column、または列の指定が無効ですテストの実行: 1、失敗: 0、エラー: 1、スキップ: 0、経過時間: 9.289 秒 <<< 失敗! testAddAdslFirmware(org.appfuse.dao.AdslDeviceDaoTest) 経過時間: 8.249 秒 <<< エラー! org.hibernate.exception.SQLGrammarException: ORA-01747: user.table.column、table.column、または列の指定が無効です
次に、引用符を追加して列名を定義します: ADSL_DEVICE."VALIDATE"
@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;
}
....
}
しかし、それでもエラーが発生します。Hibernate クエリはデッドロックのようで、クエリを実行してもメッセージに応答しません。エラーは何ですか?どうすればバグを修正できますか?
Hibernate: デュアルから NODE_ID_SEQ.nextval を選択 Hibernate: NODE (AREA_ID, DESCRIPTION, FIRMWARE_VERSION, IS_ENABLE, IS_VISIBLE, MIB_VERSION, NAME, PARENT_ID, NODE_TYPE_ID, SERIAL_NUMBER, SHORT_NAME, ID) 値 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: ADSL_DEVICE (ADSL_NAME, ADSL_SERIAL_NUMBER, CONNECTION_REQUEST, HARDWARE_VERSION, IP_ADDRESS, MANUFACTURER, OUI, PRODUCT_CLASS, PROVISIONING_CODE, SOFTWARE_VERSION, "VALIDATE", 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());
}
}
ありがとうございました!