我使用 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 先生
对不起,这不是一个问题,而是帮助人们解决这些特殊问题.我正在处理的问题需要使用串行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) 我正在尝试在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"中的所有指示,但这并不像他说的那样......
任何帮助都会很棒!
谢谢,
短发
我正在尝试从 Ubuntu 中的 USB 串行 RFID 设备读取数据。
设备为:https : //www.sparkfun.com/products/8852
该设备在 Ubuntu 下被识别为:
/dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)
如果我在将 RFID 标签接触到阅读器时使用诸如“screen”或“minicom”之类的程序,屏幕上会显示一个唯一编号。
我希望能够通过终端获取这些数据。然后当我有这个数据处理时,如果有必要的话。
我的问题是,我怎样才能获得我在这些程序中看到的数据?我想编写一个 bash 或 PHP 脚本来获取数据。
谢谢
我正在编写一个Windows服务,我想将其作为计划任务运行.在开始我想让它读取chrome进程并杀死任何有特定网址的人.
我可以使用
var list = Process.GetProcessesByName("chrome");
Run Code Online (Sandbox Code Playgroud)
但在那之后我感到难过..
每个进程的MainWindowTitle为"",MainWindowHandle为0,所以对我没有帮助.
我看过很多与此相关的帖子,似乎没有关于chrome的api,所以我在浪费时间吗?
任何帮助赞赏J
我有 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) 我想将Arduino库(即HerkuleX伺服控制库)从Arduino移植到PC(即运行Linux的桌面).由于Arduino库是用C++编写的,因此应该相当容易.但是,HerkuleX库使用了Arduino的串行库,AFAIK专用于硬件.有没有人知道一个跨平台的串行库(如Boost.Asio)与Arduino相同的API?我确信它已经存在了,但Google让我失望了.如果没有,我假设我将不得不选择一个现有的串行库并自己创建一个包装器,因此它的行为类似于Arduino Serial库.(这样,如果更新上游Arduino库,将其重新移植到PC将不会太麻烦.)
我想知道是否有一种标准的方式与高效的串行设备进行通信。我应该使用标准库吗?如果有,是哪一个?
现在我正在摆弄让 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) 我正在尝试为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与阻塞/非阻塞端口之间的关系,我将非常感激.
谢谢
有人知道Windows上stty的等效工具吗?我想在Windows平台上对串行端口设置进行反向工程.
我必须将Windows应用程序移植到Linux平台,但我没有关于我必须用于应用程序的串行端口设置的任何信息.我必须对这些设置进行逆向工程.最常见的不起作用.
Windows上的示例应用程序可用且正常工作.