小编dso*_*ano的帖子

JPA SequenceGenerator 和 GeneratedValue:名称/生成器属性仅每个类唯一?

我使用 JPA + OpenJPA 和 PostgreSQL 作为后端 RDBMS。我的表的主键通常由SERIAL/BIGSERIAL列组成。因此 PostgreSQL 会自动为新条目 ( strategy=GenerationType.IDENTITY)生成 ID 。

ID 属性的注释如下所示:

@Id
@SequenceGenerator(name="myseq",sequenceName="foobartable_fooid_seq")
@GeneratedValue(generator="myseq",strategy=GenerationType.IDENTITY)
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以将此注释块复制并粘贴到多个实体,同时只修改sequenceName值吗?该sequenceName是从桌到桌不同。但是所有实体的 SequenceGenerator 都可以命名myseq吗?还是必须为每个实体的 SequenceGenerator 指定一个唯一的生成器名称?那么每个 SequenceGenerator 名称在持久化单元中必须是唯一的吗?

使用与数据库中的 sequenceName 相同的值可能是个好主意吗?所以我会写一些类似的东西

@Id
@SequenceGenerator(name="foobartable_fooid_seq",sequenceName="foobartable_fooid_seq")
@GeneratedValue(generator="foobartable_fooid_seq",strategy=GenerationType.IDENTITY)
Run Code Online (Sandbox Code Playgroud)

关于如何命名 SequenceGenerator 的任何建议?

非常感谢您的任何建议!

你的 Snrub 先生

postgresql jpa sequence auto-increment openjpa

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

串行I/O重叠/非重叠Windows/Windows CE

对不起,这不是一个问题,而是帮助人们解决这些特殊问题.我正在处理的问题需要使用串行I/O,但主要是在Windows CE 6.0下运行.但是,最近我被问到应用程序是否也可以在Windows下运行,所以我开始着手解决这个问题.我确实花了很多时间环顾四周,看看是否有人得到了我正在寻找的答案,这些都是在很多错误信息和一些事情中基本上都是错误的事情.所以解决了这个问题,我想我会和每个人分享我的发现,所以任何遇到这些困难的人都会得到答案.

在Windows CE下,支持OVERLAPPED I/O. 这意味着通过串口的双向通信可能非常麻烦.主要的问题是,当您等待来自串行端口的数据时,您无法发送数据,因为这样做会导致主线程阻塞,直到读取操作完成或超时(取决于您是否设置了超时)

像大多数人一样做串行I/O,我有一个读取器串行线程设置用于读取串行端口,它使用WaitCommEvent()和EV_RXCHAR掩码来等待串行数据.现在,这就是Windows和Windows CE出现问题的地方.

如果我有这样一个简单的读者线程,作为一个例子: -

UINT SimpleReaderThread(LPVOID thParam)
{
    DWORD eMask;
    WaitCommEvent(thParam, &eMask, NULL);
    MessageBox(NULL, TEXT("Thread Exited"), TEXT("Hello"), MB_OK);
}
Run Code Online (Sandbox Code Playgroud)

显然,在上面的例子中,我没有从串口或任何读取数据和我假设thParam包含打开的句柄通讯端口等.现在的问题是在Windows下当你的线程执行,并打WaitCommEvent(),您的读者线程将进入休眠状态等待串口数据.好的,这很好,应该如此,但是...你如何结束这个线程并让MessageBox()出现?事实证明,它实际上并不那么容易,并且它在执行其串行I/O方面是Windows CE和Windows之间的根本区别.

在Windows CE,你可以做几件事情,使WaitCommEvent()告吹,如SetCommMask(COMMPORT_HANDLE,0),甚至CloseHandle的(COMMPORT_HANDLE).这将允许您正确终止线程,因此释放串口以便您再次开始发送数据.但是这些东西都不能在Windows下运行,并且两者都会导致你调用它们的线程在WaitCommEvent()完成时等待.那么,你如何结束Windows下的WaitCommEvent()?那么,通常你会使用重叠I/O和线程阻塞不会是一个问题,但由于该解决方案必须与Windows CE兼容以及,重叠I/O是不是一种选择.有一两件事可以在Windows下做结束WaitCommEvent(),这是调用CancelSynchronousIo()函数,这将结束您的WaitCommEvent(),但要注意这可能是设备相关.CancelSynchronousIo()的主要问题是Windows CE也不支持它,所以你运气不好用于解决这个问题!

你是怎么做到的?事实是,要解决此问题,您根本无法使用WaitCommEvent(),因为无法在Windows CE支持的Windows上终止此功能.然后,您将使用ReadFile(),它会在读取NON OVERLAPPED I/O时再次阻塞,这与Comm Timeouts一起使用.

使用ReadFile()和COMMTIMEOUTS结构意味着您必须有一个紧密循环等待您的串行数据,但如果您没有收到大量的串行数据,它应该不是问题.此外,以小超时结束循环的事件也将确保将资源传递回系统,并且您不会将处理器置于100%负载下.以下是我提出的解决方案,如果您认为可以改进,我会很感激您的反馈意见.

typedef struct
{
    UINT8 sync;
    UINT8 op
    UINT8 dev;
    UINT8 node;
    UINT8 data;
    UINT8 csum;
} COMMDAT;

COMSTAT cs = {0};
DWORD byte_count;
COMMDAT cd;

ZeroMemory(&cd, sizeof(COMMDAT));
bool recv = false;
do
{
    ClearCommError(comm_handle, 0, &cs);
    if (cs.cbInQue …
Run Code Online (Sandbox Code Playgroud)

windows io serial-port windows-ce

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

如何在Processing到/ dev/rfcomm0中设置串行通信

我正在尝试在Ubuntu 12.04和连接到Arduino的JY-MCU蓝牙串行模块之间进行串行通信.

我在/etc/bluetooth/rfcomm.conf中创建了这个配置

rfcomm0 {
#   # Automatically bind the device at startup
    bind yes;
#
#   # Bluetooth address of the device    
    device 00:12:11:19:08:54
#   # RFCOMM channel for the connection
    channel 1;
#   # Description of the connection
    comment "Linvor Bluetooth Module";
}
Run Code Online (Sandbox Code Playgroud)

我可以使用putty与/ dev/rfcomm0串口进行通信,这非常有效.

然而,尽管经过多次尝试,我根本无法看到如何在Processing中创建一个以任何方式工作的串行端口.

例如 :

println(Serial.list());
Run Code Online (Sandbox Code Playgroud)

什么都不打印.

如果我执行:

String portName = "/dev/rfcomm0";
myPort = new Serial(this, portName, 9600);
println(myPort);
Run Code Online (Sandbox Code Playgroud)

我在显示器中看到了这个:

processing.serial.Serial@1712651
Run Code Online (Sandbox Code Playgroud)

但如果我再打电话:

 myPort.write('9');
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

java.lang.NullPointerException
    at processing.serial.Serial.write(Serial.java:572)
    ...
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么会失败.我一直在遵循Tom Igoe的"Make Things Talk"中的所有指示,但这并不像他说的那样......

任何帮助都会很棒!

谢谢,

短发

processing serial-port bluetooth rfcomm

5
推荐指数
2
解决办法
3万
查看次数

从 USB 串行设备读取数据

我正在尝试从 Ubuntu 中的 USB 串行 RFID 设备读取数据。

设备为:https : //www.sparkfun.com/products/8852

该设备在 Ubuntu 下被识别为:

/dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

如果我在将 RFID 标签接触到阅读器时使用诸如“screen”或“minicom”之类的程序,屏幕上会显示一个唯一编号。

我希望能够通过终端获取这些数据。然后当我有这个数据处理时,如果有必要的话。

我的问题是,我怎样才能获得我在这些程序中看到的数据?我想编写一个 bash 或 PHP 脚本来获取数据。

谢谢

php terminal usb ubuntu serial-port

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

如何杀死特定的chrome选项卡/进程

我正在编写一个Windows服务,我想将其作为计划任务运行.在开始我想让它读取chrome进程并杀死任何有特定网址的人.

我可以使用

var list = Process.GetProcessesByName("chrome");
Run Code Online (Sandbox Code Playgroud)

但在那之后我感到难过..

每个进程的MainWindowTitle为"",MainWindowHandle为0,所以对我没有帮助.

我看过很多与此相关的帖子,似乎没有关于chrome的api,所以我在浪费时间吗?

任何帮助赞赏J

c# windows-services google-chrome

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

Arduino 和 PHP 通过串行传入字节读取

我有 PHP 脚本用于通过网站控制 Arduino 的二极管,但我遇到了问题。

我的Arduino代码是:

int green = 8;
int incomingbyte;

void setup()
{
  Serial.begin(9600);
  pinMode(green,OUTPUT);
}

void loop()
{
  if(Serial.available() > 0)
  {
    incomingbyte = Serial.read();
  }
  if(incomingbyte == '0'){
  digitalWrite(green,HIGH);
  }
  if(incomingbyte == '1'){
  digitalWrite(green,LOW);
  }
}
Run Code Online (Sandbox Code Playgroud)

我的 PHP 代码是:

<?php

error_reporting(E_ALL); 
ini_set("display_errors", 1);  

if (isset($_GET['action'])) {

    require("php_serial.class.php");

        $serial = new phpSerial();
        $serial->deviceSet("COM3");
        $serial->confBaudRate(9600);
        $serial->deviceOpen();

if ($_GET['action'] == "green1") {

        $serial->sendMessage("0\r");

} else if ($_GET['action'] == "green0") {

        $serial->sendMessage("1\r");
}

$serial->deviceClose();

}
Run Code Online (Sandbox Code Playgroud)

我的 HTML 代码:

<!DOCTYPE html> …
Run Code Online (Sandbox Code Playgroud)

html php serial-port arduino

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

是否有Arduino Serial库的跨平台"端口"?

我想将Arduino库(即HerkuleX伺服控制库)从Arduino移植到PC(即运行Linux的桌面).由于Arduino库是用C++编写的,因此应该相当容易.但是,HerkuleX库使用了Arduino的串行库,AFAIK专用于硬件.有没有人知道一个跨平台的串行库(如Boost.Asio)与Arduino相同的API?我确信它已经存在了,但Google让我失望了.如果没有,我假设我将不得不选择一个现有的串行库并自己创建一个包装器,因此它的行为类似于Arduino Serial库.(这样,如果更新上游Arduino库,将其重新移植到PC将不会太麻烦.)

c++ porting serial-port arduino

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

C++ Linux (Ubuntu) 正确写入串行(对于 Arduino)

我想知道是否有一种标准的方式与高效的串行设备进行通信。我应该使用标准库吗?如果有,是哪一个?

现在我正在摆弄让 LED 根据数字输入以给定数量点亮。(下面的Arduino代码)。只是练习东西。

看我过于简单和低效的测试:

#include <iostream>
#include <stdio.h>
using namespace std;

int
main()
{
  FILE *file;
  //Opening device file

  int getnum;

  while (true)
    {
      file = fopen("/dev/ttyACM5", "w");
      cout << ">>" << endl;
      cin >> getnum;
      fprintf(file, "%d", getnum); //Writing to the file
      fclose(file);
    }

}
Run Code Online (Sandbox Code Playgroud)

while 循环很可爱,但如果允许在不等待用户的情况下运行,则效率很低。我怀疑多余的fopen fclose使用是愚蠢的。

微控制器将感应设备的状态并向计算机发送信号。计算机将对所有这些值进行“处理”,并将消息发送回以改变 arduino 的行为。除了需要人工键盘输入之外,基本上繁重的思考都被委托给了计算机。

当然,这一切都是为了好玩,但正如您所看到的,我需要“学习 C++ 中串行交互的规则”!非常感谢任何帮助或指导。


Arduino代码:

char incomingByte = 0;   // for incoming serial data
int led = 11;
int bright;
void
setup()
{
  Serial.begin(9600);     // …
Run Code Online (Sandbox Code Playgroud)

c++ linux ubuntu serial-port arduino

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

termios VMIN VTIME和阻塞/非阻塞读取操作

我正在尝试为Linux编写一个简单的C串行通信程序.我对阻塞/非阻塞读取和VMIN/VTIME关系感到困惑.

我的问题是,如果我应该根据我是否有阻止/非阻塞打开呼叫来设置VMIN/VTIME?

例如,如果我有以下打开电话:

open( "/dev/ttyS0", O_RDWR|O_NONBLOCK|O_NOCTTY)
Run Code Online (Sandbox Code Playgroud)

我应该将VMIN/VTIME设置为:

.c_cc[VTIME]    = 0;    
.c_cc[VMIN]     = 0;
Run Code Online (Sandbox Code Playgroud)

如果我有阻止模式,如:

open( "/dev/ttyS0", O_RDWR|O_NOCTTY)
Run Code Online (Sandbox Code Playgroud)

我应该将VMIN/VTIME设置为:

.c_cc[VTIME]    = 0;    
.c_cc[VMIN]     = 1;
Run Code Online (Sandbox Code Playgroud)

即使端口打开标志设置正确,VMIN/VTIME设置为什么也没有任何区别?

如果有人能帮助我理解VMIN/VTIME与阻塞/非阻塞端口之间的关系,我将非常感激.

谢谢

linux serial-port

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

windows中的stty等价物

有人知道Windows上stty的等效工具吗?我想在Windows平台上对串行端口设置进行反向工程.

我必须将Windows应用程序移植到Linux平台,但我没有关于我必须用于应用程序的串行端口设置的任何信息.我必须对这些设置进行逆向工程.最常见的不起作用.

Windows上的示例应用程序可用且正常工作.

linux windows serial-port stty

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