我为我的项目使用JPA和Hibernate.我有两个具有相同名称但在不同包中的类.他们是:
@Entity(name = "X_USER")
@Table(name = "X_USER")
public class User {
Run Code Online (Sandbox Code Playgroud)
和:
@Entity
@Table(name="Y_USER")
public class User {
Run Code Online (Sandbox Code Playgroud)
我正在创建一个搜索查询:.getSimpleName()但它没有用,因为它们的简单名称是相同的.我改成了.getName().
但是,它仍然会让人感到困惑User.
编辑:
我有这个:
SELECT_BY_PROPERTY_QUERY = "SELECT p FROM :CLASS: p WHERE p.:PROPNAME:=?";
Run Code Online (Sandbox Code Playgroud)
那我:
SELECT_BY_PROPERTY_QUERY.replaceFirst(":CLASS:", clazz.getName()).replaceFirst(":PROPNAME:", propertyName);
Run Code Online (Sandbox Code Playgroud)
当我调试它时,它会像:
Select p from User p Where p.name=?
Run Code Online (Sandbox Code Playgroud)
它仍然是User,它不包括包信息,并返回错误的User类.
我有一个POJO类,它包括:
- 持久属性,
- 瞬态属性.
在编写HQL时,我考虑了两者:持久性和瞬态属性.就像HQL一样select persistent_properties,transient_prop from Pojo_classname
这是对的吗?
我可以@Basic为瞬态变量写注释吗?
假设我有一个定义两个视图的EJB:
两个接口共享相同的方法签名,因此它类似于:
public interface MyBusinessCommon {
void myMethod(Object o);
}
@Local
public interface MyBusinessLocal extends MyBusinessCommon { }
@Remote
public interface MyBusinessRemote extends MyBusinessCommon { }
@Stateless
public class MyBusinessBean implements MyBusinessLocal, MyBusinessRemote {
public void myMethod(Object o) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法弄清楚EJB本身(或其拦截器?)内部调用的EJB视图?
假设我想根据使用的视图执行不同的授权程序.远程应该更加受限制,本地不应该.
我可以调用SessionContext#getInvokedBusinessInterface()但这只给了我关于类对象的信息 - 而不是关于它的EJB语义.明确地使用反射来检查接口或bean上的注释是否存在是不够的(在ejb-jar.xml?中定义的视图怎么样?)
我怀疑是否有可能使用直接的EJB规范,但也许我错过了一些东西.
如果没有,是否可以从应用程序服务器的内部获取此信息?(我们只考虑JBoss AS 7.x,Glassfish 3.x和TomEE 1.5.1).
我正在开发一组REST服务.我打算使用Hibernate作为我的ORM和JAXB作为我的业务对象来简化编组和解组.在这种情况下,我必须始终将Hibernate对象映射到JAXB对象和其他方式!为此目的,是否有更高效的标准架构?
我有一个@StatefulEJB注释为@ConversationScoped.客户端(JSF)向我的EJB发出请求:启动对话 - conversation.begin()执行某些操作并显示对客户端的响应.
然后客户端发出另一个请求,EJB执行某些操作并关闭对话 - conversation.end().
@Stateful会话结束后是否删除了EJB?或者我必须明确打电话@Remove?
我想在我的一个实体中拥有只读功能。我知道在 JPA 2.0 中我们本身没有这样的功能。我认为我们可以使用它来实现它updateable=false, insertable=false,但我不认为我明白它是如何工作的。
假设我有两个实体:OrderedItem和Customer:
@Entity
public class OrderedItem {
@Id
@GeneratedValue
private int id;
private String name;
@ManyToOne
@JoinColumn(updatable = false)
private Customer owner;
// bunch of simple getters and setters
}
@Entity
public class Customer {
@Id
@GeneratedValue
private int id;
private String name;
@OneToMany(mappedBy="owner")
private Set<OrderedItem> orderedItems;
// bunch of simple getters and setters
}
Run Code Online (Sandbox Code Playgroud)
现在考虑以下代码:
Customer john = new Customer();
john.setName("John");
OrderedItem milk = new OrderedItem();
milk.setName("Milk"); …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,当用户登录系统时,系统会从DB读取一些设置并将其存储在用户的会话中.系统通过使用EclipseLink(JPA 2.0)的JPA查询执行此操作.
当我在DB中更改某些设置并再次登录时,查询将返回先前的结果.似乎EclipseLink正在缓存结果.
我用它来纠正这种行为,但它不起作用:
query.setHint(QueryHints.cache_usage,cacheUsage.no_cache);
Run Code Online (Sandbox Code Playgroud) 这似乎不起作用(= null):
@Resource(name = "java:app/AppName")
private String appName;
Run Code Online (Sandbox Code Playgroud)
但是查找相同的名称会:
appName = (String) new javax.naming.InitialContext().lookup("java:app/AppName");
Run Code Online (Sandbox Code Playgroud)
我发现很多例子都有一个查找属性@Resource而不是名字.但是,我找不到任何相关的东西,我很有信心它应该是名字,前者不是规范的一部分.
仅供参考,我正在使用Glassfish 3.1,我正在从@PostConstruct单例bean中的方法访问appName .
我有一个组件,我想在用户点击后显示/隐藏commandButton.
就像这样:
<h:commandButton id="showButton" value="#{bean.wasPressed ? 'Hide' : 'Show'}">
<f:ajax listener="#{bean.toggle()}" render="explanation showButton" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
和
<h:panelGroup id="explanation" rendered="#{bean.wasPressed}">
<h:outputText value="something" />
</h:panelGroup>
Run Code Online (Sandbox Code Playgroud)
在bean.toggle()简单地设置wasPressed属性为true或false适当.我在用<h:form prependId="false">.
问题是render我的按钮属性的值.它明确地征服了两者:explanation和showButton.
只要showButton始终存在(它只更改其标签),explanation仅当wasPressed属性为true 时才存在.否则它说:
malformedXML:更新期间:找不到解释
我怎么解决这个问题?
我不想恢复隐藏源代码中的元素,所以我不想使用任何jQuery切换( - )或任何使用style="display: none"或任何这些东西隐藏元素的方式.
它甚至可以在JSF 2.1中实现吗?
我今天发现了JPA 2.0 Criteria API并希望了解它.刚刚通过一些例子,并试着去做.我有一个带有柱子的餐桌水果:
常规的东西:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("fruitManager");
EntityManager em = emf.createEntityManager();
//get the criteria builder
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Fruit> c = cb.createQuery(Fruit.class);
Run Code Online (Sandbox Code Playgroud)
如何使用条件构建以下查询:
select id, name, color where name like 'XY%' and color='orange'
Run Code Online (Sandbox Code Playgroud)
即如何:
还有什么地方可以通过几种不同类型的SQL查询获得更多关于'Criteria'的例子吗?
java ×4
java-ee-6 ×4
jpa ×4
hibernate ×3
jpa-2.0 ×3
eclipselink ×2
ejb ×2
ejb-3.1 ×2
java-ee ×2
ajax ×1
annotations ×1
caching ×1
cdi ×1
criteria-api ×1
ejb-jar.xml ×1
facelets ×1
hql ×1
interceptor ×1
jaxb ×1
jsf-2 ×1
readonly ×1
show-hide ×1