小编Pio*_*cki的帖子

JPA如何识别具有相同名称但在不同包中的两个类?

我为我的项目使用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类.

java hibernate jpa entitymanager

6
推荐指数
1
解决办法
1695
查看次数

注释@Basic到瞬态变量

我有一个POJO类,它包括:
- 持久属性,
- 瞬态属性.

在编写HQL时,我考虑了两者:持久性和瞬态属性.就像HQL一样select persistent_properties,transient_prop from Pojo_classname

这是对的吗?

我可以@Basic为瞬态变量写注释吗?

java annotations jpa hql java-ee

6
推荐指数
1
解决办法
1674
查看次数

找出使用的EJB视图

假设我有一个定义两个视图的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).

ejb-jar.xml interceptor java-ee-6 ejb-3.1 sessioncontext

6
推荐指数
1
解决办法
311
查看次数

合并Hibernate对象和JAXB对象

我正在开发一组REST服务.我打算使用Hibernate作为我的ORM和JAXB作为我的业务对象来简化编组和解组.在这种情况下,我必须始终将Hibernate对象映射到JAXB对象和其他方式!为此目的,是否有更高效的标准架构?

hibernate jpa jaxb

5
推荐指数
1
解决办法
506
查看次数

EJB 3.1有状态和CDI范围对话

我有一个@StatefulEJB注释为@ConversationScoped.客户端(JSF)向我的EJB发出请求:启动对话 - conversation.begin()执行某些操作并显示对客户端的响应.

然后客户端发出另一个请求,EJB执行某些操作并关闭对话 - conversation.end().

@Stateful会话结束后是否删除了EJB?或者我必须明确打电话@Remove

ejb cdi java-ee-6 ejb-3.1

5
推荐指数
1
解决办法
2135
查看次数

@ManyToOne(updatable=false) - 它应该如何工作?

我想在我的一个实体中拥有只读功能。我知道在 JPA 2.0 中我们本身没有这样的功能。我认为我们可以使用它来实现它updateable=false, insertable=false,但我不认为我明白它是如何工作的。

假设我有两个实体:OrderedItemCustomer

@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)

java readonly eclipselink java-ee-6 jpa-2.0

5
推荐指数
1
解决办法
8963
查看次数

禁用EclipseLink缓存

在我的应用程序中,当用户登录系统时,系统会从DB读取一些设置并将其存储在用户的会话中.系统通过使用EclipseLink(JPA 2.0)的JPA查询执行此操作.

当我在DB中更改某些设置并再次登录时,查询将返回先前的结果.似乎EclipseLink正在缓存结果.

我用它来纠正这种行为,但它不起作用:

query.setHint(QueryHints.cache_usage,cacheUsage.no_cache);
Run Code Online (Sandbox Code Playgroud)

caching eclipselink jpa-2.0

5
推荐指数
1
解决办法
3447
查看次数

JNDI注入应用程序名称不起作用,查找确实如此

这似乎不起作用(= 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 .

java ejb java-ee

5
推荐指数
1
解决办法
4661
查看次数

AJAX渲染属性不适用于rendered ="false"组件

我有一个组件,我想在用户点击后显示/隐藏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我的按钮属性的值.它明确地征服了两者:explanationshowButton.

只要showButton始终存在(它只更改其标签),explanation仅当wasPressed属性为true 时才存在.否则它说:

malformedXML:更新期间:找不到解释

我怎么解决这个问题?

我不想恢复隐藏源代码中的元素,所以我不想使用任何jQuery切换( - )或任何使用style="display: none"或任何这些东西隐藏元素的方式.

它甚至可以在JSF 2.1中实现吗?

ajax facelets show-hide java-ee-6 jsf-2

5
推荐指数
1
解决办法
8479
查看次数

关于JPA 2.0标准的一些基本问题

我今天发现了JPA 2.0 Criteria API并希望了解它.刚刚通过一些例子,并试着去做.我有一个带有柱子的餐桌水果:

  • ID,
  • 名称,
  • 颜色,
  • 尺寸,
  • 味道.

常规的东西:

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)
  1. 如何使用条件构建以下查询:

    select id, name, color where name like 'XY%' and  color='orange'
    
    Run Code Online (Sandbox Code Playgroud)

    即如何:

    • 只获取一些列,
    • 包括外卡搜索,
    • 包括AND,OR在哪里条件.

  2. 此外,在获取实际数据之前,最好先计算结果.如何首先获取结果计数?

还有什么地方可以通过几种不同类型的SQL查询获得更多关于'Criteria'的例子吗?

hibernate jpa criteria-api jpa-2.0

4
推荐指数
1
解决办法
8443
查看次数