我的问题是分离的对象......
我目前正在使用Spring和Hibernate.
我有一个映射对象,主键作为字符串(我知道它很糟糕......但重构代码需要几个月),我希望坚持下去.(我用两个属性简化了对象)
@Id
private String id;
private String pattern;
Run Code Online (Sandbox Code Playgroud)
所以例如我想添加如下内容:
[ "ID": "myFirstPattern", "图案": "*"]
请注意我的主键已经设置好了.问题在于,每当我尝试持久化时,Hibernate将尝试将此对象与上下文中的任何对象(由于主键)链接,并且将无法执行此操作,因为没有.抛出分离的对象错误.
我做了一些研究并得出结论,merge()足以满足我的需求,因为即使对象不可用它也会持续存在并更新.但是我发现这是一个相当肮脏的解决方法,并想检查是否有任何其他解决方案来解决这个问题.
考虑到我们有一个Helper层,因此Services层不能直接与HibernateDao层一起使用.所以我可以通过添加'persist'和'update'方法来"屏蔽"它,这将调用相同的合并DAO方法.
谢谢,弗拉维奥.
大家好,我在做NamedQuery时遇到了一些精确匹配的问题.
我目前正在使用这样的东西:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from Entry e where e.name =:"+ Entry.NAME )
...
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName());
Run Code Online (Sandbox Code Playgroud)
它适用于大多数情况,但是我注意到,如果用户在末尾传递带有空格的文件名,则namedQuery会忽略该字符.例如:
Query query = em.createNamedQuery(MyClass.GET_ENTRY_BY_NAME);
query.setParameter(Entry.NAME, myEntry.getName()+ " ");
Run Code Online (Sandbox Code Playgroud)
将返回与之前的查询相同的结果.绕过我的"有效条目"验证.换句话说,我希望查询根本不返回任何条目,稍后再处理错误.
我能想到的一个解决方法是在namedQuery中放置我的参数的单引号,如下所示:
@NamedQuery(name = MyClass.GET_ENTRY_BY_NAME, query = "select e from entry e where e.name =':"+ Entry.NAME "'")
Run Code Online (Sandbox Code Playgroud)
但是,如果String中包含单引号,它将丢弃我的代码...
有什么想法吗?