小编zig*_*ggy的帖子

关于Hibernate和ORM与Oracle的使用的几个问题

我正在考虑编写一个工具,列出oracle数据库中的所有表.单击每个表的任何链接将加载该表中的数据.

通常我只是在代码中使用普通的旧jdbc和标准的sql查询或存储过程.到目前为止,这对我来说工作正常,但我想知道如果使用hibernate将有助于减少工作量.这也是学习hibernate的好方法.

如果hibernate可以提供帮助以及如何帮助,请告诉我.我可以想到以下推理

  • 无需编写查询
  • 无需管理查询
  • 管理交易可能会更容易.

还有一些问题我不确定答案是什么.例如,我将使用的数据库已经很老了,并非所有表都有主键.阅读有关hibernate的教程,出现了以下问题

  • 所有表都必须有一个名为"id"的主键吗?我的表中没有一个名为id的列.主键以其他名称命名
  • 表必须有主键吗?并非所有表都有主键.特别是有常设数据的表格.
  • 某些表将主键作为复合键(主键由2列组成).这些是允许的吗?

我也会对任何简单的教程感兴趣.我见过一对夫妇,但没有一个是打算让新手去做.

谢谢


有人可以提供hibernate变得非常宝贵的情况/示例场景

谢谢

java orm hibernate

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

在运行时动态选择类

我试图想出一个解决方案,根据消息类型,在运行时选择处理"消息"的类.我知道我可以使用这样的东西

if msg_type = "A"
  MsgAProcessor.execute(message);
else if msg_type = "B"
  MsgBProcessoror = execute(message);
....
....
....
Run Code Online (Sandbox Code Playgroud)

我不想使用上面的方法,因为我不希望代码知道我可以处理的消息类型的任何信息.我希望将来能够为新的消息类型添加新的消息处理器.我现在想到的解决方案如下

目前有3个消息处理器

MsgAProcessor
MsgBProcessor
MsgBProcessor
Run Code Online (Sandbox Code Playgroud)

所有这三个类都有一个名为execute的方法,它将以自己的方式处理消息.我创建了一个名为MsgProcessor的接口,并在接口中添加了execute()方法.

现在我很难知道调用者应该调用哪个消息处理器而不必检查消息类型.例如,我不能这样做

MsgProcessor proc = new MsgAprocessor()proc.execute()

上面将要求在if语句中,因为它需要在找到消息类型后立即调用.我还想避免使用实现类类型进行实例化.

有没有更好的方法来实现同样的目标?

我希望能够从接口调用MsgProcessor.execute,并让运行时环境知道要根据消息类型调用哪个实现类.

java class-design classloader java-ee

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

比较DATE类型的值 - Oracle

有没有办法比较日期值来检查一个是否在另一个之前?例如,我如何知道哪个在以下行中排在第一位

SEQ   CREATION_DTM
--------------------
234   2011-03-26 22:59:03
235   2011-03-26 22:59:03
Run Code Online (Sandbox Code Playgroud)

上述数据的列声明为数据类型DATE.阅读它似乎DATE数据类型不存储毫秒.这是否意味着我无法比较上述两个日期以找出哪一个在另一个之前?

编辑

我在Solaris上使用Oracle 10G.

sql oracle plsql oracle10g

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

在sql查询中使用java.sql.Timestamp对象

我试图在java中运行一个查询,该查询使用java.sql.Timestamp对象作为与where子句进行比较的日期.

以下是使用Java构建的查询字符串的方式

 String getTransactionsSQL =  "Select transaction_seq " +
    "From transactions ct " +
    "Where id = 'ABCD'" + 
    "And ct.out_msg_timestamp" +
    "<= to_date('" + parseDate.getTimeStamp() +"','YYYY-MM-DD HH:MI:SS..')" +
    "order by transaction_seq"; 
Run Code Online (Sandbox Code Playgroud)

该语句parseDate.getTimeStamp()返回java.sql.TimeStamp包含日期的对象.这是一个示例输出System.out.println(parseDate.getTimeStamp());

2011-03-07 05:47:57.0
Run Code Online (Sandbox Code Playgroud)

当我运行上述查询时,我收到此错误

 java.sql.SQLException: ORA-01843: not a valid month
Run Code Online (Sandbox Code Playgroud)

有线索吗?

java sql oracle timestamp jdbc

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

将char数组分配给int数组

有人可以解释为什么下面代码中的最后一个赋值无效

类ScjpTest扩展BounceObject实现Bouncable {

static int ac = 5;
static char ab = 'd';

static int[] a = new int[]{1,2,3};
static int[] b = new int[]{1,2,3};
static char[] c = new char[]{'a','b'};

public static void main(String[] args){  
    a = b;
    b = a;

    ac = ab;  //This is accepted
    a = c;    //This is rejected
}
Run Code Online (Sandbox Code Playgroud)

}

编译器抱怨以下错误

ScjpTest.java:10: incompatible types
found   : char[]
required: int[]
                a = c;
                    ^
1 error
Run Code Online (Sandbox Code Playgroud)

以下也被接受

class Animal{}
class Horse extends Animal{]

Animal[] animals …
Run Code Online (Sandbox Code Playgroud)

java arrays

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

带有别名的多个表的SQL"Where exists"

示例查询:

Select id, id_dtm
From tableA 
Where exists (
 Select 1 
 From tableB b, tableC c, tableD d
 Where b.id = id
 And b.id_dtm = id_dtm
 And b.id = c.id
 And c.id = d.id);
Run Code Online (Sandbox Code Playgroud)

上述查询的问题是所有4个表都有名为id和id_dtm的列.当我运行它时,我得到一个错误,表示列ORA-00918:列模糊定义

我可以通过在tableA中使用别名来修复,但问题是查询是动态生成的.该where exists部分是在其他地方生成的,之前的位合并,所以我不能使用现在的别名.

有没有什么办法可以在where exists子句中使用tableA中的id和id_dtm 而不使用tableA的别名?

数据库是Oracle10G

sql oracle

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

JBoss AS 7简单的hello world应用程序

我试图让一个简单的JMS"Hello world"应用程序运行.我想在JBoss Application Server 7上试一试,但我无法运行它.作为HornetQ的Jboss嵌入其中,我使用以下命令启动它:

standalone.bat --server-config=standalone-preview.xml
Run Code Online (Sandbox Code Playgroud)

我认为问题很可能是我在JBoss中配置队列的方式.这是我做的步骤.

  • 配置队列

Quene名称:testQueue JNDI名称:queue/test

队列配置有一个"选择器"选项.这可以留空,如果没有,这个领域会发生什么?

这是我用作发件人的代码.我现在不担心接收器,因为我只想先开始发送消息.

package jms.ex3;

import javax.naming.InitialContext;

import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.QueueSender;
import javax.jms.DeliveryMode;
import javax.jms.QueueSession;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;

public class Sender
{
    public static void main(String[] args) throws Exception
    {
       // get the initial context
       InitialContext ctx = new InitialContext();

       // lookup the queue object
       Queue queue = (Queue) ctx.lookup("queue/test");

       // lookup the queue connection factory
       QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
           lookup("queue/connectionFactory");

       // create …
Run Code Online (Sandbox Code Playgroud)

jboss jndi jms message-queue hornetq

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

为什么迭代器需要对一般定义的列表进行强制转换

class ZiggyTest{

    public static void main(String[] args){

        List<Integer> list = new LinkedList<Integer>();
        list.add(4);
        list.add(5);
        list.add(-5);

        for(Iterator i = list.iterator(); i.hasNext();){
            Integer in = i.next();
            System.out.println(in);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

上面的代码示例导致以下编译器错误:

ZiggyTest.java:17: incompatible types
found   : java.lang.Object
required: java.lang.Integer
            Integer in = i.next();
                               ^
1 error
Run Code Online (Sandbox Code Playgroud)

当与Iterator关联的List一般被声明时,为什么Iterator.next()方法需要强制转换?

java oop generics collections

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

从PL/SQL包执行立即运行

我在PL/SQL包中有以下代码行

l_sql := 'alter table LOG_FILES location ('||chr(39)|| filename || to_char(sysdate,'DDMMYY') ||chr(39)||'))';
execute immediate l_sql;
Run Code Online (Sandbox Code Playgroud)

pl/sql包编译得很好,但我没有看到变化.alter命令完全没有效果.这有什么理由吗?

注意:我尝试更改的Oracle External表.

oracle plsql oracle10g

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

使用Servlet上下文让两个servlet使用同一个对象

我正在尝试编写一个简单的程序,我可以在应用程序范围的会话中放置HashMap,并获得两个应用程序/上下文,因为两个war文件访问HashMap.

Servlet 1

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException{
        PrintWriter out = response.getWriter();

        HashMap<String ,String> hm = new HashMap<String, String>();
        hm.put("1", "1");

        this.getServletContext().setAttribute("usermanager", hm);
        this.getServletConfig().getServletContext().setAttribute("usermanager2", hm);   
    }
Run Code Online (Sandbox Code Playgroud)

Servlet 2

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException{

    HashMap newMap2 = (HashMap) this.getServletConfig().getServletContext().getAttribute("usermanager"); 
    HashMap newMap3 = (HashMap) this.getServletContext().getAttribute("usermanager2"); 

    System.out.println("newmap2 size " + newMap2.size());
    System.out.println("newmap3 size " + newMap3.size());   
}
Run Code Online (Sandbox Code Playgroud)

为了测试这一点,我重新启动了Tomcat 6,然后首先运行访问Servlet 1,以便初始化Hashmap对象.当我随后访问Servlet 2时,我得到一个NULL-POINTER错误,指向我试图调用newMap2.size()的行号

我究竟做错了什么?

java.lang.NullPointerException
    at com.TestServlet.doGet(TestServlet.java:24)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) …
Run Code Online (Sandbox Code Playgroud)

java session tomcat servlets

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