java—使用应用程序属性文件在本机查询中选择表名?

inb24sb2  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(418)

我在spring引导应用程序中使用本机查询,希望能够从属性文件中选择表名。我尝试使用spel表达式,它确实使用@entity注解中指定的表名…但是我想使用 @Value(${table.name} 将字符串“bookshelf”插入实体注解(如果有意义的话)。
我还尝试了一种不同的方法,使用hibernate的物理命名策略,但是它似乎没有替换表名。
实体类:

@Entity(name = "bookshelf")
   public class Object{

   private String color;
   private String shape;
}

存储库:

@Repository
public interface ObjectRepository extends CrudRepository<Object,Long>{

@Query(nativeQuery = true, value = "select color from #{#entityName} where shape =: shape)
public List<Object> findObjectsByShape(@Param("shape") String shape);

应用程序.yml

table:
  name: bookshelf

我怎样才能做到这一点?

vaj7vani

vaj7vani1#

你不能用注解来做这件事。
你能做什么:
向entitymanager注入例如:

@PersistenceContext
EntityManager em;

你可以打电话给他们

em.createNativeQuery("your native query")

where可以使用类中可以访问的任何值。
但是:请注意,这可能是对应用程序发起sql注入攻击的第一步。如果除了动态生成查询之外,还有其他方法可以实现您的目标,请使用其他方法。

r3i60tvu

r3i60tvu2#

从安全Angular 动态传递表名是不好的做法 Hibernate 无论您如何使用 Eclipse-Link 如果仍然需要实施,

String tableName = "tablename";
String query = "SELECT * FROM " +tablename +"WHERE salary > 10000";

相关问题