对于@javax.persistence.Column感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍updatable=false,并为您提供关于@ManyToOne(optional=fal
对于@ javax.persistence.Column感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍updatable = false,并为您提供关于@ManyToOne(optional = false)与@Column(nullable = false)有什么区别、Hibenate中,@JoinColumn注解的nullable,insertable,updatable属性是什么作用?、java – JPA @Id和insertable = false,updatable = false抛出异常、java – JPA:@PrimaryKeyJoinColumn(…)与@JoinColumn(…,insertable =?,updatable =?)相同?的有用信息。
本文目录一览:- @ javax.persistence.Column(updatable = false)
- @ManyToOne(optional = false)与@Column(nullable = false)有什么区别
- Hibenate中,@JoinColumn注解的nullable,insertable,updatable属性是什么作用?
- java – JPA @Id和insertable = false,updatable = false抛出异常
- java – JPA:@PrimaryKeyJoinColumn(…)与@JoinColumn(…,insertable =?,updatable =?)相同?
@ javax.persistence.Column(updatable = false)
如果我将字段定义为不可更新,这是否意味着该字段永远无法更新?我想做的是在保存整个实体对象时防止字段更新,但仍然能够编写显式更新此字段的查询。这可能吗?
我正在使用Hibernate和MySQL,但我更愿意编写可移植的代码。
答案1
小编典典作为记录,设置updatable=false
只影响SQL
UPDATE语句 产生 的持久性提供:
该列是否包含在持久性提供程序生成的SQL UPDATE语句中。
您仍然能够编写这样的SQL更新语句,以更新此列中的值。此功能在JPA规范中定义,并非特定于Hibernate / MySQL。
@ManyToOne(optional = false)与@Column(nullable = false)有什么区别
在JPA中,我什么时候使用属性optional=false
和注释感到困惑@Column(nullable=false)
。有什么区别?
答案1
小编典典@Column(nullable=false)
是用于生成架构的指令。在类中生成的数据库列将在实际数据库中标记为不可为空。
optional=false
是运行时指令。它所做的主要功能是与延迟加载有关。您不能延迟加载非集合映射的实体,除非您记得设置了optional =
false(因为Hibernate不知道那里应该有一个代理还是一个null,除非您告诉它null是不可能的,否则它可以生成代理人。)
Hibenate中,@JoinColumn注解的nullable,insertable,updatable属性是什么作用?
今天早上就发过了,可能太早了,只有一个站友回答了,现在再发一遍。
Java EE的文档里说的是, (Optional) Whether the column is included in SQL INSERT/UPDATE statements generated by the persistence provider.但是我试过了,无论insertable和updatable为true还是false,SQL里还是会带上该外键列,下面是一个例子:
@OneToMany(targetEntity=OrderItemPO.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL,orphanRemoval=false) @JoinColumn(name="order_id", referencedColumnName = "id", nullable = true, insertable = false, updatable = false) private List<OrderItemPO> orderItemList = new ArrayList<OrderItemPO>();但是插入时,底层的SQL的确带上了外键列,代码如下:
OrderItemPO itemPO = new OrderItemPO(); itemPO.setOrderId(2090); session.save(itemPO);问题出在哪呢?还是我理解错文档的意思?
希望知道的站友能解惑,先谢了。
java – JPA @Id和insertable = false,updatable = false抛出异常
CREATE SEQUENCE CASE_SEQ START WITH 1001 INCREMENT BY 1 NOMAXVALUE; CREATE OR REPLACE TRIGGER CASE_TR_SEQ BEFORE INSERT ON CASE FOR EACH ROW BEGIN SELECT CASE_SEQ.NEXTVAL INTO :NEW.CASE_ID FROM DUAL; END; /
然后我有一个带有属性的简单实体:
@Id @Column(name = "CASE_ID",insertable = false,updatable = false) private Long caseId;
…当我尝试构建项目时,我得到:
Exception [EclipseLink-46] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DescriptorException Exception Description: There should be one non-read-only mapping defined for the primary key field [CASE.CASE_ID].
当我删除可插入或可更新的关键字时,它可以工作.我知道有很多解决方案如何使用JPA生成ID,JPA也可以使用(调用)oracle序列来设置(生成)ID.但我试着理解为什么我的解决方案是错误的.为什么我不能将这两个关键字与@Id注释一起使用?我的想法是:我想禁止JPA插入或更新caseId.
1)什么是正确的洗液?我应该只使用@Id:
@Id @Column(name = "CASE_ID") private Long caseId;
或更好(更安全)定义insertable = false:
@Id @Column(name = "CASE_ID",insertable = false) private Long caseId;
2)我理解@Id的updatable = false没有意义(更新主键没有意义但是原始sql可能有意义),但它是什么意思(你有什么好处的例子):
@Id @Column(name = "CASE_ID",updatable = false) private Long caseId;
编辑2012-04-13
我做了一些测试:
实体
@Id @Column(name = "CASE_ID") private Long caseId;
JPA日志
INSERT INTO CASE (CASE_ID,CASE_DATE,INFO) VALUES (?,?,?) bind => [3 parameters bound]|#]
所以这不安全,因为JPA尝试存储CASE_ID(然后由触发器的Oracle序列中的ID替换).
实体
@Id @Column(name = "CASE_ID",insertable = false) private Long caseId;
创建方法
public void createCase(final Case caseData) { caseData.setCaseId(-1001L); em.persist(caseData); }
JPA日志
INSERT INTO CASE (CASE_DATE,?) bind => [2 parameters bound]|#]
这很好,因为CASE_ID不是insert命令的一部分.
由于注释ID,因此无法更新CASE_ID:
public void update() { Case update = em.find(Case.class,1023L); update.setCaseId(1028L); } Exception [EclipseLink-7251] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ValidationException Exception Description: The attribute [caseId] of class [com.wordpress.kamiluv.jsfprototype.model.entity.Case] is mapped to a primary key column in the database. Updates are not allowed.
所以现在最后一个版本看起来最安全,对吧?
解决方法
java – JPA:@PrimaryKeyJoinColumn(…)与@JoinColumn(…,insertable =?,updatable =?)相同?
@JoinColumn(...,insertable = false,updatable = false)
要么
@JoinColumn(…,insertable = true,updatable = true)
用于常规(非继承)关联?应该互换吗?什么是可插入和可更新属性设置为?他们是否设定了任何东西?请注意,我只定位到(似乎)实现的只读属性…
我正在使用EclipseLink和Hibernate获得非常不一致的映射异常
这是@PrimaryKeyJoinColumn JavaEE 5 6 Javadoc:
PrimaryKeyJoinColumn (JavaEE 5)
PrimaryKeyJoinColumn (JavaEE 6)
引用:
… and it may be used in a OnetoOne mapping in which the primary key of the referencing entity is used as a foreign key to the referenced entity.
解决方法
请注意,在JPA 2.0中,您还可以将@Id添加到@OnetoOne映射,并避免重复的基本id属性完全相同.
看到
> Identity and Sequencing > Primary Keys through OneToOne and ManyToOne Relationships
和
> OneToOne > Target Foreign Keys,Primary Key Join Columns,Cascade Primary Keys
从WikiBooks Java Persistence页
关于@ javax.persistence.Column和updatable = false的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于@ManyToOne(optional = false)与@Column(nullable = false)有什么区别、Hibenate中,@JoinColumn注解的nullable,insertable,updatable属性是什么作用?、java – JPA @Id和insertable = false,updatable = false抛出异常、java – JPA:@PrimaryKeyJoinColumn(…)与@JoinColumn(…,insertable =?,updatable =?)相同?的相关知识,请在本站寻找。
这篇文章主要围绕Python:如何并行运行python函数?和python 并行执行多个函数展开,旨在为您提供一份详细的参考资料。我们将全面介绍Python:如何并行运行python函数?的优缺点,解答python 并行执行多个函数的相关问题,同时也会为您带来C Python:在上下文中运行Python代码、Python setattr() 函数 ,Python super() 函数: Python 内置函数 Python 内置函数、python – 从命令行运行PyCharm项目、python中函数如何定义?python函数的调用方法介绍的实用方法。
本文目录一览:- Python:如何并行运行python函数?(python 并行执行多个函数)
- C Python:在上下文中运行Python代码
- Python setattr() 函数 ,Python super() 函数: Python 内置函数 Python 内置函数
- python – 从命令行运行PyCharm项目
- python中函数如何定义?python函数的调用方法介绍
Python:如何并行运行python函数?(python 并行执行多个函数)
我先研究了一下,却找不到答案。我试图在Python中并行运行多个函数。
我有这样的事情:
files.pyimport common #common is a util class that handles all the IO stuffdir1 = ''C:\folder1''dir2 = ''C:\folder2''filename = ''test.txt''addFiles = [25, 5, 15, 35, 45, 25, 5, 15, 35, 45]def func1(): c = common.Common() for i in range(len(addFiles)): c.createFiles(addFiles[i], filename, dir1) c.getFiles(dir1) time.sleep(10) c.removeFiles(addFiles[i], dir1) c.getFiles(dir1)def func2(): c = common.Common() for i in range(len(addFiles)): c.createFiles(addFiles[i], filename, dir2) c.getFiles(dir2) time.sleep(10) c.removeFiles(addFiles[i], dir2) c.getFiles(dir2)
我想调用func1和func2并使它们同时运行。这些功能彼此之间或在同一对象上不相互作用。现在,我必须等待func1完成才能启动func2。我该如何执行以下操作:
process.pyfrom files import func1, func2runBothFunc(func1(), func2())
我希望能够几乎同时创建两个目录,因为我每分钟都在统计要创建多少个文件。如果该目录不存在,将会拖延我的时间。
答案1
小编典典你可以使用threading或multiprocessing。
由于CPython的特殊性,threading
不太可能实现真正的并行性。因此,multiprocessing
通常是更好的选择。
这是一个完整的示例:
from multiprocessing import Processdef func1(): print ''func1: starting'' for i in xrange(10000000): pass print ''func1: finishing''def func2(): print ''func2: starting'' for i in xrange(10000000): pass print ''func2: finishing''if __name__ == ''__main__'': p1 = Process(target=func1) p1.start() p2 = Process(target=func2) p2.start() p1.join() p2.join()
可以按照以下方式轻松地将子进程的启动/联接机制封装为一个函数runBothFunc:
def runInParallel(*fns): proc = [] for fn in fns: p = Process(target=fn) p.start() proc.append(p) for p in proc: p.join()runInParallel(func1, func2)
C Python:在上下文中运行Python代码
使用Python C API函数,PyEval_EvalCode
您可以执行已编译的Python代码。我想像 在函数范围内执行一样执行
Python代码块,以便它具有自己的局部变量字典,该字典不影响全局状态。
这似乎很容易做到,因为PyEval_EvalCode
可以提供全局和本地字典:
PyObject* PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject*locals)
我遇到的问题与Python如何查找变量名有关。考虑以下我执行的代码PyEval_EvalCode
:
myvar = 300def func(): return myvarfunc()
这个简单的代码实际上引发了错误,因为Python无法myvar
从内部找到变量func
。即使myvar
位于外部作用域的本地字典中,Python也不会将其复制到内部作用域的本地字典中。原因如下:
每当Python查找变量名时,首先检查locals
,然后检查globals
,最后检查builtins
。在 模块范围
,locals
并且globals
是相同的字典对象。因此x =5
,模块作用域中的语句将放置x
在locals
字典中,该globals
字典也是字典。现在,在模块作用域中定义的需要查找的函数x
将不会x
在function-
scope中找到locals
,因为Python不会将模块作用域的局部变量复制到function-
scope的局部变量中。但这通常不是问题,因为它可以x
在中找到globals
。
x = 5def foo(): print(x) # This works because ''x'' in globals() == True
只有 嵌套 函数,Python才能将外部作用域的本地复制到内部作用域的本地。(仅在内部范围内需要它们时,它似乎也很懒惰。)
def foo(): x = 5 def bar(): print(x) # Now ''x'' in locals() == True bar()
因此,所有这些的结果是,在 模块范围内 执行代码时,必须确保全局字典和本地字典是SAME对象,否则模块作用域函数将无法访问模块作用域变量。
但就我而言,我不希望全局词典和本地词典相同。因此,我需要某种方式告诉Python解释器我正在函数作用域内执行代码。有什么办法可以做到这一点?我查看了PyCompileFlags
和的其他参数,PyEval_EvalCodeEx
但找不到任何方法可以做到这一点。
答案1
小编典典Python实际上并没有将外部作用域的本地复制到内部作用域的本地;locals
状态文档:
当在功能块中调用免费变量时,它是由locals()返回的,而在类块中则没有。
这里的“自由”变量是指由嵌套函数封闭的变量。这是一个重要的区别。
您的情况,最简单的解决方法是只传递 同一个 字典对象globals
和locals
:
code = """myvar = 300def func(): return myvarfunc()"""d = {}eval(compile(code, "<str>", "exec"), d, d)
否则,您可以将代码包装在一个函数中,然后从编译的对象中提取出来:
s = ''def outer():\n '' + ''\n ''.join(code.strip().split(''\n''))exec(compile(s, ''<str>'', ''exec'').co_consts[0], {}, {})
Python setattr() 函数 ,Python super() 函数: Python 内置函数 Python 内置函数
描述
setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在。
语法
setattr 语法:
setattr(object, name, value)
参数
- object -- 对象。
- name -- 字符串,对象属性。
- value -- 属性值。
返回值
无。
实例
以下实例展示了 setattr 的使用方法:
描述
super() 函数是用于调用父类(超类)的一个方法。
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
语法
以下是 super() 方法的语法:
super(type[, object-or-type])
参数
- type -- 类。
- object-or-type -- 类,一般是 self
Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :
Python3.x 实例:
class A:
pass class B(A): def add(self, x): super().add(x)
Python2.x 实例:
class A(object): # Python2.x 记得继承 object pass class B(A): def add(self, x): super(B, self).add(x)
返回值
无。
实例
以下展示了使用 super 函数的实例:
执行结果:
Parent
Child
HelloWorld from Parent Child bar fuction I''m the parent.
python – 从命令行运行PyCharm项目
我正在尝试将我的项目部署到服务器并在那里运行它.
当我尝试从命令行启动脚本时,它显示错误
导入parrent目录中的脚本时.
我使用PyCharm创建了项目(python 2.7.10),它被分散到多个目录中.
文件夹loock fimetnihg像这样:
项目/目录/子目录/ main_dir / script1.py
from dir.subdir.other_dir.script2 import * //gives error here
项目/目录/子目录/ other_dir / script2.py
def my_function():
//do something
我通过转到main_dir并运行:python script1.py来运行脚本
这意味着如果我们以您的脚本1为例,您的导入应如下所示:
from other_dir.script2 import *
机会是您的PyCharm项目根目录设置为从中运行
project/
这就是你的引用在PyCharm中工作的原因.
我建议你做的是,如果你的服务器应该在main_dir中运行,那么你应该重新配置PyCharm,以便它的执行根是相同的,以消除这种混乱.
python中函数如何定义?python函数的调用方法介绍
本篇文章给大家带来的内容是关于python中函数如何定义?python函数的调用方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
1. 函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
2. 函数的作用,使用函数可以加强代码的复用性,提高程序编写的效率
3. 函数的使用,函数必须先创建才可以使用,该过程称为函数定义,函数创建后可以使用,使用过程称为函数调用
函数定义与调用:
立即学习“Python免费学习笔记(深入)”;
1) >>> def 函数名(形参1,形参2): # 定义
... 函数体
函数名(实参1,实参2) #调用
4. 函数的注释,写在函数定义的下方,使用”””内容”””的方法在pycharm函数的调用的地方鼠标放上按Ctrl可以快速查看函数的注释内容
5. 函数参数的作用域,函数内部定义的叫做局部变量,函数外部的变量叫做全局变量,局部变量的作用域只限于函数内部使用
>>> def test(a, b): ... print(a, b) ... >>> test(1, 2) 1 2 >>> print(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined
形参是外部是无法被调用的
6. 函数外部的变量在函数内部可以直接调用但是无法修改全局变量的内容,可以在函数内部使用global 变量名重新定义后修改
1) >>> a = 1 >>> def test(b): ... print(b) ... print(a) ... >>> test(2) 2 1
可以直接调用外部定义的变量
2) >>> a = 1 >>> def test(): ... a += 1 ... print(a) ... >>> test() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in test UnboundLocalError: local variable 'a' referenced before assignment
函数内部本来是无法修改函数外部的变量的值
3)>>> a = 1 >>> def test(): ... global a ... a += 1 ... print(a) ... >>> test()
在函数内部重新声明了变量a之后就可以修改变量a的值了
7. 函数的返回值,python中函数的关键字return, 生成迭代器 yield 返回
1) 定义格式:
def 函数名():
函数体
return 返回值
2) 调用格式:
变量名 = 函数名()
3) return 语句执行后面的内容将不再执行
以上就是python中函数如何定义?python函数的调用方法介绍的详细内容,更多请关注php中文网其它相关文章!
关于Python:如何并行运行python函数?和python 并行执行多个函数的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于C Python:在上下文中运行Python代码、Python setattr() 函数 ,Python super() 函数: Python 内置函数 Python 内置函数、python – 从命令行运行PyCharm项目、python中函数如何定义?python函数的调用方法介绍的相关知识,请在本站寻找。
本文标签: