gpt4 book ai didi

java - Hibernate 命名查询的表名问题

转载 作者:行者123 更新时间:2023-11-30 05:15:57 25 4
gpt4 key购买 nike

我在 Hibernate 中有以下命名查询:

<sql-query name="CreateLogTable">
CREATE TABLE IF NOT EXISTS :tableName (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`url` VARCHAR (750) NOT NULL,
`query` VARCHAR (500),
`ipaddress` VARCHAR (39),
`datetime` DATETIME NOT NULL,
`hits` MEDIUMINT UNSIGNED DEFAULT '0' NOT NULL,
`path_id` VARCHAR (8),
PRIMARY KEY(`id`),
UNIQUE(`id`),
INDEX(`id`,`query`,`datetime`,`path_id`)
) TYPE = MyISAM
</sql-query>

然后我尝试使用以下行执行此行(常量指向正确的项目):

getSession().getNamedQuery(CREATE_SQL).setString(CREATE_SQL_TABLE_NAME_PARAM, "wibble").executeUpdate();

现在,当我执行代码时,我收到一个关于表名的 SQL 错误,该错误被引号括起来:

CREATE TABLE IF NOT EXISTS 'wibble' (

如果我采用生成的查询并在表名周围不加引号的情况下尝试,则查询可以正常工作。这只是引起我问题的那些引用。

所以我的问题是:我需要使用什么来代替 setString 来确保我的参数不被引号包围?我尝试过 setParameter 但没有成功,并且我无法从 API 中找到任何更好的替代方案。

感谢您的任何意见,李

最佳答案

我认为您不能将命名参数用于数据库标识符(例如表名)。仅值表达式。如果允许,它会让你容易受到 SQL 注入(inject)攻击。作为替代方案,您可以用 Java 构建查询。

关于java - Hibernate 命名查询的表名问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277892/

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