我在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
我怎样才能做到这一点?
2条答案
按热度按时间vaj7vani1#
你不能用注解来做这件事。
你能做什么:
向entitymanager注入例如:
你可以打电话给他们
where可以使用类中可以访问的任何值。
但是:请注意,这可能是对应用程序发起sql注入攻击的第一步。如果除了动态生成查询之外,还有其他方法可以实现您的目标,请使用其他方法。
r3i60tvu2#
从安全Angular 动态传递表名是不好的做法
Hibernate
无论您如何使用Eclipse-Link
如果仍然需要实施,